大数据技术入门(第2版)
上QQ阅读APP看书,第一时间看更新

2.7 Mac上安装Hadoop

在我和Hadoop打交道的十年中,经历了几种安装Hadoop的方法。一种常见的方法是使用Hortonworks或Cloudera的安装包,在多个物理的Linux机器(操作系统是CentOS 6.5)上安装和配置。最近几年我们转向AWS,在AWS上使用脚本安装和部署Hadoop和集群(分别为生产环境、staging环境和开发环境)。还可以在个人Mac机器上安装Hadoop作为个人练习之用。

2.7.1 在Mac上安装Hadoop

本节我们在Mac机器上安装Hadoop。下面是我在MacBook Pro机器上安装的步骤,具体详细信息可参见Hadoop官网:https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/ SingleCluster.html。注意,我安装的是本书成稿时的最新版本3.1.1,模拟分布式环境(Pseudo-Distributed)。模拟分布式环境就是模拟Hadoop集群,不是单机版。安装Hadoop的步骤如下:

步骤01 确保你的Mac机器上安装了Homebrew和Java(推荐Java 1.8)。

步骤02 启动Terminal,配置ssh如下:

(1)运行“ssh-keygen –t rsa”以生成ssh key。

(2)运行“cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys”。

(3)创建或添加以下内容到~/.ssh/config文件中。这个配置文件的作用是自动装载key到ssh代理程序中,并在keychain上保存你在(1)步骤上创建key时所输入的文本信息(passphrases)。

(4)运行“ssh-add –K ~/.ssh/id_rsa”把key添加到ssh代理程序中,并在keychain上保存你在创建key时所输入的文本信息。

(5)启动远程登录。在“System Preferences”→“Sharing”上,针对“Remote Login”,如图2-9所示,在右边选择所有用户“All users”。

(6)运行“ssh localhost”,确保看到“Last login:”等信息,这表明配置SSH成功。

步骤03 开始安装Hadoop。运行“brew install hadoop”来安装最新版的Hadoop。安装完成后,就可以在/usr/local/Cellar/hadoop/下找到刚刚安装的Hadoop软件。

步骤04 在~目录下创建.profile,添加以下内容后,运行“source ~/.profile”。

     export HADOOP_HOME=/usr/local/Cellar/hadoop/3.1.1/libexec
     export HADOOP_MAPRED_HOME=$HADOOP_HOME
     export HADOOP_HDFS_HOME=$HADOOP_HOME
     export HADOOP_YARN_HOME=$HADOOP_HOME
     export HADOOP_COMMON_HOME=$HADOOP_HOME
     export HIVE_HOME=/usr/local/Cellar/hive/3.1.1/libexec
     export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin

图2-9 设置远程登录

步骤05 配置Hadoop:

(7)配置hadoop-env.sh:

          $ cd /usr/local/Cellar/hadoop/3.1.1/libexec/etc/hadoop
          $ vi hadoop-env.sh

在这个文件中,设置JAVA_HOME(请根据你的JAVA实际路径做调整)和HADOOP_HOME:

     export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/
     Contents/Home
     export HADOOP_HOME=/usr/local/Cellar/hadoop/3.1.1/libexec

(8)运行“vi $HADOOP_HOME/ etc/hadoop/core-site.xml”,配置core-site.xml:

(9)运行“vi $HADOOP_HOME/ etc/hadoop/hdfs-site.xml”,配置hdfs-site.xml:

请注意,上面是用于设置数据备份的。在实际的生产系统上千万不要设置为1。Hadoop会自动使用备份,如果没有备份,那就麻烦了。

步骤06 运行“$HADOOP_HOME/bin/hdfs namenode –format”格式化文件系统。

步骤07 运行“$HADOOP_HOME/sbin/start-dfs.sh”以启动HDFS。在Mac机器上可以忽略如下警告信息:

     WARN util.NativeCodeLoader: Unable to load native-hadoop library for your
     platform... using builtin-java classes where applicable

步骤08 简单测试Hadoop:

(1)输入“hadoop version”,应该得到如下类似的输出结果:

(2)在浏览器中输入http://localhost:9870/查看名字节点NameNode(注:老版本的端口号是50070),如图2-10所示。

图2-10 HDFS NameNode

注意

· 检查上图的“Configured Capacity”的大小,如果不是0,则说明DataNode运行基本正常。如果是0,就要检查Hadoop日志文件。

· Hadoop日志文件在$HADOOP_HOME/logs下,找到带有DataNode名字的最新日志文件。这个文件中会说明不成功的原因。例如:

          Directory /usr/local/Cellar/hadoop/hdfs/tmp/dfs/data is in an
          inconsistent state: Can't format the storage directory because the current
          directory is not empty.

· DataNode是建立在/usr/local/Cellar/hadoop/hdfs/tmp/dfs/data上。根据上面的错误信息,这时可以删除它下面的文件夹和文件来修复。

步骤09 输入如下命令来测试HDFS:

     $ hdfs dfs -mkdir /user
     $ hdfs dfs -mkdir /user/zhenghong
     $ hdfs dfs -mkdir input
     $ hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml input
     $ hadoop jar
     $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar
     grep input output 'dfs[a-z.]+'
     $ hdfs dfs -cat output/*

上述命令在HDFS创建了input目录,把本地文件系统上的xml文件复制到HDFS的input目录中,并运行了一些测试程序。在output目录上的内容为:

     1 dfsadmin
     2 dfs.replication

(1)在mapred-site.xml和yarn-site.xml中配置YARN:

(2)运行“start-yarn.sh”以启动YARN,如图2-11所示。

(3)在浏览器中输入http://localhost:8088/以访问资源管理器。

图2-11 查看集群中的所有应用

2.7.2 安装MySQL和Hive

在MySQL的官网https://dev.mysql.com/doc/refman/8.0/en/osx-installation-pkg.html上,列出了在Mac上安装MySQL的详细步骤。首先下载.dmg文件,然后双击安装文件,按照提示就可以完成软件安装。在安装过程中,会提示你输入root账号的密码。安装后,运行“mysql –u root –p”进入MySQL,然后执行SQL语句(例如show tables来查看表)。

下面我们安装和配置Hive:

步骤01 运行“brew install hive”来安装Hive。

步骤02 在“.profile”上设置HIVE_HOME(如果还没设置的话):

     export HIVE_HOME=/usr/local/Cellar/hive/3.1.1/libexec
     export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin

运行“source .profile”。

步骤03 在Hive端设置JDBC驱动程序如下:

(1)从MySQL官网上下载JDBC驱动程序(我选择了Platform Independent版本):

     http://dev.mysql.com/downloads/connector/j/

(2)运行以下命令,解压缩驱动程序,复制到Hive端:

     tar xvf mysql-connector-java-8.0.13.tar
     cd mysql-connector-java-8.0.13
     cp mysql-connector-java-8.0.13.jar /usr/local/Cellar/hive/3.1.1/
     libexec/lib/

步骤04 运行“mysql –u root -p”,在MySQL上配置metastore如下:

     mysql> CREATE DATABASE metastore;
     mysql> USE metastore;
     mysql> SOURCE
     $HIVE_HOME/scripts/metastore/upgrade/mysql/hive-schema-3.1.0.mysql.sql;
     mysql> CREATE USER 'zhenghong'@'%' IDENTIFIED BY '*password*';
     mysql> GRANT all on *.* to 'zhenghong'@localhost;
     mysql> flush privileges;

在$HIVE_HOME/bin下,有一个工具,schematool,也可以执行“schematool –dbType mysql –initSchema”来生成metastore表结构。

步骤05 配置hive-site.xml文件:

     $ cd $HIVE_HOME/conf
     $ cp hive-default.xml.template hive-site.xml

在hive-site.xml文件中,设置连接MySQL的metastore数据库等信息:

步骤06 创建/tmp和/user/hive/warehouse(即:hive.metastore.warehouse.dir)如下:

     $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
     $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
     $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
     $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

步骤07 测试Hive。使用create语句(例如create table hive2 (char1 char(2));)创建一个表,插入2行数据(insert into hive2 select cast("1b" as char(2));),查看数据(select * from hive2;),如图2-12所示。

图2-12 查看数据

步骤08 如果在浏览器中输入http://localhost:8088/,那么就能看到刚刚运行的应用。

我们看一下上面的配置,这样是不是把连接数据库的信息全泄露了,你可能会说,大家都是同公司的,泄露也无所谓,但我们想一下,在一个大的公司里,大数据平台是几个部门共用的,这样泄露MySQL的信息的风险还是挺大的。Hive的另一个组件MetaStoreServer就能解决这个问题。等于说,我们在Hive CLI与MySQL中间启动一个MetaStoreServer,Hive CLI就不需要连接MySQL,直接连接这个MetaStoreServer了。在hive-site.xml中只需要简单地配置一下:

这样我们就通过metastore数据库取得了元数据的信息。当然如果只是一个MetaStore,则存在单点问题,不过我们可以配置两个或者多个MetaStoreServer,这样就实现了负载均衡与容错的功能了,如下面的配置: