Hadoop+Hbase+Hive+Zookeeper+Mysql

最近公司在计划未来能够自己使用Hadoop环境,于是都在研究环境的搭建、和一些基本的操作。在服务器弄了三台来搭建了一个小集群环境。方便日后查阅做个记录。

 

环境准备:

系统版本:CentOS release 6.7  64

 

软件版本:

 

说明:HadoopHiveHbase有版本兼容的问题,原来使用的Hive-1.2.1但是在整合Hbase时出现错误一直无法解决,最后升级到Hive-2.0.0版本后,配置文件跟原来1.2.1一样,却可以实现整合。

系统规划:【此处规划不规范,SecondNameDode应该分开】

Hadoop的进程:NameNodeSecondNameDodeDataNodeJobHistoryServer

Yarn计算框架:ResourceManagerNodeManager

Hbase的进程:HMasterHRegionServer

ZookeeperHQuorumPeerQuorumPeerMain

 

以下操作在每台机器上执行:【root用户操作】 

 

1、关闭所有系统的防火、SELINUX配置:

  1. service iptables stop 
  2. chkconfig iptables off 
  3. sed -i 's#enforcing#disabled#' /etc/selinux/config 

2、建立hadoop【运行Hadoop 的一个普通用户,并授权sudo】

  1. useradd hadoop 
  2. echo “123456”|passwd --stdin hadoop 
  3. SUDO 授权: 
  4. echo "hadoop ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers 

3、修改主机名,IP 地址;根据上面的规划一一对应。【略】

4、修改/etc/hosts

  1. 192.168.254.18 hadoop-01 
  2. 192.168.254.18 hadoop-02 
  3. 192.168.254.18 hadoop-03 

5、添加时间同步定时任务:

  1. #update system time 
  2. */15 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >/dev/null 2>&1 

 

以下操作只在Hadoop-01 主机上操作:

切换到hadoop 用户后,在家目录建立一个tools 目录用来存放软件包,建立一个app 目录把有的软件安装到此目录下:

  1. mkdir /home/hadoop/{tools,app} 

1、上传的文件有:

hadoop-2.5.2.tar.gz、apache-hive-2.0.0-bin.tar.gz、hbase-1.1.4-bin.tar.gz、jdk-7u79-linux-x64.gz、mysql-connector-java-5.1.38.tar.gz、

zookeeper-3.4.6.tar.gz、mysql-5.5.36.tar.gz

2、解压所有软件到app 目录下:

cd app/

进入到app 目录中执行下面批量解压:

  1. find /home/hadoop/tools/ -name "*.tar.gz" -exec tar zxf {} \; 

6、创建软件的软连接【方便软件升级】

  1. ln -s hadoop-2.5.2/ hadoop 
  2. ln -s apache-hive-2.0.0-bin/ hive 
  3. ln -s hbase-1.1.4/ hbase 
  4. ln -s zookeeper-3.4.6/ zookeeper 
  5. ln -s jdk1.7.0_79/ java7 

7、添加环境变量:

vim ~/.bash_profile

  1. #HDFS ENV.sh configuration 
  2. export JAVA_HOME=/home/hadoop/app/java7 
  3. export ZK_HOME=/home/hadoop/app/zookeeper 
  4. export HBASE_HOME=/home/hadoop/app/hbase 
  5. export HIVE_HOME=/home/hadoop/app/hive 
  6. export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
  7. export HADOOP_HOME=/home/hadoop/app/hadoop 
  8. export YARN_HOME=$HADOOP_HOME 
  9. export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native 
  10. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin 

8、创建SSH 免密钥登陆:

  1. ssh-keygen -q -t rsa -N "" -f /home/hadoop/.ssh/id_rsa 

分到密钥到:hadoop-02,hadoop-03;同时自己也要做一个密钥认证:

  1. ssh-copy-id -i hadoop-01 
  2. ssh-copy-id -i hadoop-02 
  3. ssh-copy-id -i hadoop-03 

9、同步.bash_profile 到其它的主机上:

  1. scp ~/.bash_profile hadoop-02:~ 
  2. scp ~/.bash_profile hadoop-03:~ 

10、安装Mysql 服务:【Mysql 只在Hadoop-01 上运行,仅作Hive 的元数据存储,建议切换到root 用户下操作】

11、安装依懒包:

  1. su root 
  2. yum -y install gcc gcc-c++ ncurses ncurses-devel cmake 

12、添加mysql 用户

  1. useradd -M -s /sbin/nologin mysql 

13、建立存放数据的目录:

  1. mkdir -p /data/mysql 

14、编译安装:

cd mysql-5.5.36

  1. cmake \ 
  2. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.36 \ 
  3. -DMYSQL_DATADIR=/data/mysql \ 
  4. -DMYSQL_USER=mysql \ 
  5. -DSYSCONFDIR=/etc \ 
  6. -DMYSQL_TCP_PORT=3306 \ 
  7. -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ 
  8. -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  9. -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
  10. -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 
  11. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
  12. -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
  13. -DENABLED_LOCAL_INFILE=1 \ 
  14. -DENABLE_DTRACE=0 \ 
  15. -DDEFAULT_CHARSET=utf8mb4 \ 
  16. -DDEFAULT_COLLATION=utf8mb4_general_ci \ 
  17. -DWITH_EMBEDDED_SERVER=1 
  18.  
  19. 编译安装 
  20. make -j `grep processor /proc/cpuinfo | wc -l` 
  21.  
  22. #编译很消耗系统资源,小内存可能编译通不过 
  23. make install 

15、添加到开机启动服务:

  1. /bin/cp /usr/local/mysql-5.5.36/support-files/mysql.server /etc/init.d/mysqld 
  2. chmod +x /etc/init.d/mysqld 
  3. chkconfig --add mysqld 
  4. chkconfig mysqld on 

16、/etc/my.cnf,仅供参考  【详情参考文章后的PDF文档】

17、初始化数据库,并启动服务:

  1. /usr/local/mysql/scripts/mysql_install_db --user=mysql --group=mysql --basedir=/usr/local/mysql --datadir=/data/mysql 
  2.  
  3. service mysqld start 

18、登陆Mysql 并创建一个名为hive 的用户,和数据库,并授权登陆。

  1. create database hive; 
  2.  
  3. grant all privileges on hive.* to “hive”@”%” indentified by “123456”; 
  4.  
  5. flush privileges; 

Hadoop 的配置:

进入配置文件目录:cd /home/hadoop/app/hadoop/etc/hadoop/

1、修改配置文件:core-site.xml

  1. <configuration> 
  2. <property> 
  3. <name>fs.default.name</name> 
  4. <value>hdfs://hadoop-01:9000</value> 
  5. </property> 
  6. <property> 
  7. <name>hadoop.tmp.dir</name> 
  8. <value>/home/hadoop/app/hadoop/tmp</value> 
  9. </property> 
  10. <property> 
  11. <name>heartbeat.recheck.interval</name> 
  12. <value>1000</value> 
  13. </property> 
  14. </configuration> 

2、修改配置文件:hdfs-site.xml

  1. <configuration> 
  2. <property> 
  3. <name>dfs.namenode.secondary.http-address</name> 
  4. <value>hadoop-01:9001</value> 
  5. </property> 
  6. <property> 
  7. <name>dfs.namenode.name.dir</name> 
  8. <value>/home/hadoop/app/hadoop/hdfs/name</value> 
  9. </property> 
  10. <property> 
  11. <name>dfs.datanode.data.dir</name> 
  12. <value>/home/hadoop/app/hadoop/hdfs/data</value> 
  13. </property> 
  14. <property> 
  15. <name>dfs.replication</name> 
  16. <value>2</value> 
  17. </property> 
  18. <property> 
  19. <name>dfs.webhdfs.enabled</name> 
  20. <value>true</value> 
  21. </property> 
  22. </configuration> 

3、修改配置文件:yarn-site.xml

  1. <configuration> 
  2.  
  3. <property> 
  4.  
  5. <name>yarn.nodemanager.aux-services</name> 
  6.  
  7. <value>mapreduce_shuffle</value> 
  8. </property> 
  9. <property> 
  10. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 
  11. <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
  12. </property> 
  13. <property> 
  14. <name>yarn.resourcemanager.address</name> 
  15. <value>hadoop-01:8032</value> 
  16. </property> 
  17. <property> 
  18. <name>yarn.resourcemanager.scheduler.address</name> 
  19. <value>hadoop-01:8030</value> 
  20. </property> 
  21. <property> 
  22. <name>yarn.resourcemanager.resource-tracker.address</name> 
  23. <value>hadoop-01:8031</value> 
  24. </property> 
  25. <property> 
  26. <name>yarn.log-aggregation-enable</name> 
  27. <value>true</value> 
  28. </property> 
  29. </configuration> 

4、修改配置文件:mapred-site.xml

cp mapred-site.xml.template mapred-site.xml

  1. <configuration> 
  2. <property> 
  3. <name>mapreduce.framework.name</name> 
  4. <value>yarn</value> 
  5. </property> 
  6. <property> 
  7. <name>mapreduce.jobhistory.address</name> 
  8. <value>0.0.0.0:10020</value> 
  9. </property> 
  10. <property> 
  11. <name>mapreduce.jobhistory.webapp.address</name> 
  12. <value>0.0.0.0:19888</value> 
  13. </property> 
  14. </configuration> 

5、修改配置文件:hadoop-env.sh 加入JAVA 安装目录:

  1. export JAVA_HOME=/home/hadoop/app/java7 

6、修改配置文件: master 【由于SecondNameDode 也在同一主机上,所以写上,如果环境允许不建议此配置。】

  1. echo “hadoop-01” >master 

7、修改配置文件: slaves 【写上所有DataNode 节点】

  1. hadoop-02 
  2. hadoop-03 

Hive 的配置:

进入配置文件目录:cd /home/hadoop/app/hive/conf

1、修改配置文件: hive-site.xml

  1. cp hive-default.xml.template hive-site.xml 
  2.  
  3. <property> 
  4. <name>hive.exec.local.scratchdir</name> 
  5. <value>/home/hadoop/app/hadoop/tmp</value> 
  6. <description>Local scratch space for Hive jobs</description> 
  7. </property> 
  8. <property> 
  9. <name>hive.downloaded.resources.dir</name> 
  10. <value>/home/hadoop/app/hadoop/tmp</value> 
  11. <description>Temporary local directory for added resources in the remote file system.</description> 
  12. </property> 
  13. <property> 
  14. <name>javax.jdo.option.ConnectionPassword</name> 
  15. <value>123456</value> 
  16. <description>password to use against metastore database</description> 
  17. </property> 
  18. <property> 
  19. <name>javax.jdo.option.ConnectionURL</name> 
  20. <value>jdbc:mysql://192.168.254.18:3306/hive?createDatabaseIfNotExist=true</value> 
  21. <description>JDBC connect string for a JDBC metastore</description> 
  22. </property> 
  23. <property> 
  24. <name>javax.jdo.option.ConnectionUserName</name> 
  25. <value>hive</value> 
  26. <description>Username to use against metastore database</description> 
  27. </property> 
  28. <property> 
  29. <name>javax.jdo.option.ConnectionDriverName</name> 
  30. <value>com.mysql.jdbc.Driver</value> 
  31. <description>Driver class name for a JDBC metastore</description> 
  32. </property> 
  33. <property> 
  34. <name>hive.metastore.local</name> 
  35. <value>false</value> 
  36. </property> 

2、修改配置文件:hive-env.sh

  1. cp hive-env.sh.template hive-env.sh 
  2. HADOOP_HOME=/home/hadoop/app/hadoop 
  3. export HIVE_CONF_DIR=/home/hadoop/app/hive/conf 

3、修改配置文件:

  1. cp hive-log4j2.properties.template hive-log4j2.properties 

4、把mysql-connector-java-5.1.38-bin.jar 复制到hive/lib/目录下:

  1. cp tools/mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /home/hadoop/app/hive/lib/ 

5、初始化Hive 元数据【元数据会根据上面的配置文件写入到Mysql 中的Hive 库】

  1. cd /home/hadoop/app/hive/bin 
  2. ./schematool -dbType mysql -initSchema 

说明:在hive-1.1.4 的版前都要先启动hive --service metastore & 和hive --service hiveserver2 &服务才可以登陆到hive 命令行,但

是在2.0.0 版本发现不用启动也可以直接登陆命令。

Hive 上创建的表数据可以直接在Mysql 中查询到,表的一些记录信息:

  1. select * from hive.TBLS; 

HBASE 的配置:

cd /home/hadoop/app/hbase/conf

1、修改配置文件:hbase-env.sh

  1. export JAVA_HOME=/usr/local/java7 
  2. export HBASE_CLASSPATH=/home/hadoop/app/hbase/conf 
  3. export HBASE_LOG_DIR=${HBASE_HOME}/logs 
  4. export HBASE_PID_DIR=/home/hadoop/app/hbase/tmp 

2、修改配置文件:hbase-site.xml

  1. <configuration> 
  2. <property> 
  3. <name>hbase.rootdir</name> 
  4. <value>hdfs://hadoop-01:9000/hbase</value> 
  5. </property> 
  6. <property> 
  7. <name>hbase.cluster.distributed</name> 
  8. <value>true</value> 
  9. </property> 
  10. <property> 
  11. <name>hbase.zookeeper.property.clientPort</name> 
  12. <value>2181</value> 
  13. </property> 
  14. <property> 
  15. <name>hbase.master</name> 
  16. <value>192.168.254.18</value> 
  17. </property> 
  18. <property> 
  19. <name>hbase.zookeeper.quorum</name> 
  20. <value>192.168.254.19,192.168.254.28</value> 
  21. </property> 
  22. <property> 
  23. <name>dfs.support.append</name> 
  24. <value>true</value> 
  25. </property> 
  26. </configuration> 

3、修改配置文件:regionservers 【Hbase 各个节点的主机名或IP 地址】

  1. 192.168.254.18 
  2. 192.168.254.19 
  3. 192.168.254.28 

由于Hbase 需要Zookeeper 来调度,这里我们使用自己安装的,不用自带的如果需要启动自带的zookeeper 即需要

在hbase-env.sh 文件中启动:export HBASE_MANAGES_ZK=true 。

Zookeeper 的配置:

  1. cd /home/hadoop/app/zookeeper/conf 

1、修改配置文件:zoo.cfg

cp zoo_sample.cfg zoo.cfg

  1. [hadoop@hadoop-01 conf]$ egrep -v "^#|^$" zoo.cfg 
  2.  
  3. tickTime=2000 
  4. initLimit=10 
  5. syncLimit=5 
  6. dataDir=/home/hadoop/app/zookeeper/data 
  7. dataLogDir=/home/hadoop/app/zookeeper/logs 
  8. clientPort=2181 
  9. server.1=192.168.254.18:2888:3888 
  10. server.2=192.168.254.19:2888:3888 
  11. server.3=192.168.254.28:2888:3888 

2、添加每个主机的Myid:【根据配置文件zoo.cfg 的server.X 对应】

echo 1 >/home/hadoop/app/zookeeper/data/myid

基本上配置完成,接下来把上面整个app 目录同步到其它节点:hadoop-02、hadoop-03 上:

  1. scp -r app/ hadoop-02:~ 
  2. scp -r app/ hadoop-03:~ 

由于上面已经同步了~/.bash_profile 文件,此时在各节点的环境变量已经正常了,可以直接执行相关的命令了:

注意:由于上面的zookeeper 的myid 是要一一对应的。

在hadoop-02 上执行:

  1. echo 2 >/home/hadoop/app/zookeeper/data/myid 

在hadoop-03 上执行:

  1. echo 3 >/home/hadoop/app/zookeeper/data/myid 

一切准备好后,格式化NameNode:【在Hadoop-01 节点上操作】

  1. hadoop fs -format namenode 

启动服务:

1、启动HDFS:

  1. cd /home/hadoop/app/hadoop/sbin/ 
  2.  
  3. ./start-dfs.sh 

2、启动Yarn 计算框架:

  1. ./start-yarn.sh 

3、启动Jobhistory 服务:

  1. ./mr-jobhistory-daemon.sh start historyserver 

4、启动zookeeper 服务:每台服务器上分别启动:最好按【zoo.cfg】配置文件中顺序的启动:

  1. /home/hadoop/app/zookeeper/bin/zkServer.sh start 

5、启动Hbase 服务:【只需要在Hadoop-01 节点上操作】

  1. /home/hadoop/app/hbase/bin/start-hbase.sh 
  2.  
  3. ./start-dfs.sh 

6、检查服务是否正常运行:

jps

更详细可参考PDF文档:Hadoop+Hbase+Hive+Zookeeper集群.pdf

 链接:http://pan.baidu.com/s/1eSAudnc 密码:83y0