本帖最后由 nettman 于 2014-2-5 18:38 编辑
目录:
Hadoop集群(CDH4)实践之 (0) 前言
Hadoop集群(CDH4)实践之 (1) Hadoop(HDFS)搭建
Hadoop集群(CDH4)实践之 (2) HBase&Zookeeper搭建
Hadoop集群(CDH4)实践之 (3) Hive搭建
Hadoop集群(CHD4)实践之 (4) Oozie搭建
Hadoop集群(CHD4)实践之 (5) Sqoop安装
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hadoop集群(CDH4)实践之 (0) 前言本文内容
Hadoop集群(CDH4)实践之 (0) 前言 下面进入正文
那么为什么这次又要写这个系列的文章呢,看起来内容感觉都是重复的。
其实,主要是由于以下原因:
1. 之前的文章是基于Ubuntu10.10 系统,也同样适用于新版的Ubuntu,但是采用CentOS作为生产环境的情况更多;
同时由于Ubuntu有一些改动与开源社区的步伐不太一致,因此目前有唱衰Ubuntu的趋势。
2. CentOS随着EPEL等扩展库的规范和快速发展,目前已经具备了和Ubuntu同等规模的丰富的软件库,通过YUM安装和部署软件也非常的方便;
3. 之前的文章是基于CDH3的,而目前Hadoop的发展,CDH4已经成为了主流,同时具备CDH3所不具备的一些功能,我觉得最有用的功能有以下:
a) NameNode HA,与secondarynamenode不同,CDH4提供了一种HA的方式,可以确保双节点NameNode;
b) TaskTracker 提供了容错机制,可以确保并行计算过程中,不会因为某一个节点出错而导致整个并行计算的失败; 因此,基于以上原因,本文是在CentOS 6.4x86_64的系统上,基于CDH4的环境下完成的。
不过,目前还没有完成NamenodeHA 和TaskTracker容错的测试,相关内容暂时还无法看到。
同时,本文采用了非YARN方式,而是与CDH3相同的MRv1计算框架,为了确保公司之前线上环境所开发的代码能够准确无误的运行。
下面,就让我们开始整个实战演练过程: Hadoop集群(CDH4)实践之 (1)Hadoop(HDFS)搭建本文内容
Hadoop集群(CDH4)实践之 (1) Hadoop(HDFS)搭建 环境准备
OS: CentOS 6.4 x86_64
Servers:
hadoop-master: 172.17.20.230 内存10G
- namenode hadoop- secondarynamenode: 172.17.20.234 内存10G
- secondarybackupnamenode,jobtracker hadoop-node-1: 172.17.20.231 内存10G
- datanode,tasktracker hadoop-node-2: 172.17.20.232 内存10G
- datanode,tasktracker hadoop-node-3: 172.17.20.233 内存10G
- datanode,tasktracker 对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务 本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头或在标题说明。 2. 安装Java环境
由于整个Hadoop项目主要是通过Java开发完成的,因此需要JVM的支持。
登陆 www.oracle.com(需要创建一个ID),从以下地址下载一个64位的JDK,如jdk-7u45-linux-x64.rpm http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html $ sudo rpm -ivh jdk-7u45-linux-x64.rpm
$ sudo vim /etc/profile.d/java.sh
exportJAVA_HOME=/usr/java/jdk1.7.0_45 exportJRE_HOME=$JAVA_HOME/jre exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH $ sudo chmod +x /etc/profile.d/java.sh
$ source /etc/profile 4. 安装Hadoop相关套件,选择MRv1的框架支持
$ sudo yum install hadoop-hdfs-namenode //仅在hadoop-master上安装 $ sudo yum installhadoop-hdfs-secondarynamenode //仅在hadoop-secondary上安装
$ sudo yum install hadoop-0.20-mapreduce-jobtracker //仅在hadoop-secondary上安装 $ sudo yum install hadoop-hdfs-datanode //仅在hadoop-node上安装
$ sudo yum install hadoop-0.20-mapreduce-tasktracker //仅在hadoop-node上安装 $ sudo yum install hadoop-client 5. 创建Hadoop配置文件
$ sudo cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster 6. 激活新的配置文件
$ sudo alternatives --verbose --install /etc/hadoop/conf hadoop-conf/etc/hadoop/conf.my_cluster 50
$ sudo alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
$ cd /etc/hadoop/conf 7. 添加hosts记录并修改对应的主机名
$ sudo vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4 ::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6
172.17.20.230hadoop-master 172.17.20.234hadoop-secondary 172.17.20.231hadoop-node-1 172.17.20.232hadoop-node-2 172.17.20.233hadoop-node-3 9. 配置hadoop/conf下的文件
$ sudo vim /etc/hadoop/conf/masters
hadoop-master $ sudo vim /etc/hadoop/conf/slaves
hadoop-node-1 hadoop-node-2 hadoop-node-3 10. 创建hadoop的HDFS目录
$ sudo mkdir -p /data/{1,2,3,4}/mapred/local
$ sudo chown -R mapred:hadoop /data/{1,2,3,4}/mapred/local $ sudo mkdir -p /data/1/dfs/nn/nfsmount/dfs/nn /data/1/dfs/ns /data/{1,2,3,4}/dfs/dn
$ sudo chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/ns/data/{1,2,3,4}/dfs/dn
$ sudo chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/ns/data/{1,2,3,4}/dfs/dn $ sudo mkdir /data/tmp
$ sudo chmod 1777 /data/tmp 11. 配置core-site.xml
$ sudo vim /etc/hadoop/conf/core-site.xml <?xmlversion="1.0"?> <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-master:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/tmp/hadoop-${user.name}</value> </property>
<property> <name>hadoop.proxyuser.oozie.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.oozie.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hive.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hive.groups</name> <value>*</value> </property> </configuration> 12. 配置hdfs-site.xml
$ sudo vim /etc/hadoop/conf/hdfs-site.xml
<?xmlversion="1.0"?> <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/data/1/dfs/nn,/nfsmount/dfs/nn</value> </property> <property> <name>dfs.namenode.http-address</name> <value>hadoop-master:50070</value> </property>
<property> <name>fs.namenode.checkpoint.period</name> <value>3600</value> </property> <property> <name>fs.namenode.checkpoint.dir</name> <value>/data/1/dfs/ns</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop-secondary:50090</value> </property>
<property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions.superusergroup</name> <value>supergroup</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value> </property> <property> <name>dfs.datanode.max.xcievers</name> <value>4096</value> </property> </configuration>
13. 配置mapred-site.xml
$ sudo vim /etc/hadoop/conf/mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration> <property> <name>mapred.job.tracker</name> <value>hadoop-secondary:8021</value> </property> <property> <name>mapred.local.dir</name> <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value> </property> </configuration> 14. 格式化HDFS分布式文件系统
$ sudo -u hdfs hadoop namenode -format //仅在hadoop-master上执行一次 15. 启动Hadoop进程
在hadoop-master上启动namenode
$ sudo /etc/init.d//etc/init.d/hadoop-hdfs-namenode start 在hadoop-secondary上启动secondarynamenode,jobtracker
$ sudo /etc/init.d/hadoop-hdfs-secondarynamenode start
$ sudo /etc/init.d/hadoop-0.20-mapreduce-jobtracker start 在hadoop-node上启动datanode,tasktracker
$ sudo /etc/init.d/hadoop-hdfs-datanode start
$ sudo /etc/init.d/hadoop-0.20-mapreduce-tasktracker start 16. 创建mapred.system.dir以及/tmp HDFS目录
以下HDFS操作仅需在任意一台主机上执行一次
$ sudo -u hdfs hadoop fs -mkdir /tmp
$ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
$ sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
$ sudo -u hdfs hadoop fs -chmod 1777/var/lib/hadoop-hdfs/cache/mapred/mapred/staging
$ sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred
$ sudo -u hdfs hadoop fs -ls -R /
$ sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
$ sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system 17. 配置HADOOP_MAPRED_HOME
$ sudo vim /etc/profile.d/hadoop.sh
exportHADOOP_MAPRED_HOME=/usr/lib/hadoop-0.20-mapreduce $ source /etc/profile 18. 查看整个集群的状态
通过网页进行查看:http://hadoop-master:50070 19. 至此,Hadoop(HDFS)的搭建就已经完成。 Hadoop集群(CDH4)实践之 (2)HBase&Zookeeper搭建本文内容
Hadoop集群(CDH4)实践之 (2)HBase&Zookeeper搭建 环境准备
OS: CentOS 6.4 x86_64
Servers:
hadoop-master: 172.17.20.230 内存10G
- namenode
- hbase-master hadoop-secondarynamenode:172.17.20.234 内存10G
- secondarybackupnamenode,jobtracker hadoop-node-1:172.17.20.231 内存10Gsudo yum install hbase-regionserver
- datanode,tasktracker
- hbase-regionserver,zookeeper-server hadoop-node-2:172.17.20.232 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server hadoop-node-3:172.17.20.233 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server 对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务
hbase-master - Hbase的管理服务
hbase-regionServer - 对Client端插入,删除,查询数据等提供服务
zookeeper-server - Zookeeper协作与配置管理服务 本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头或在标题说明。 1.安装前的准备
Hadoop集群(CDH4)实践之 (1)Hadoop(HDFS)搭建 配置NTP时钟同步
$ sudo yum install ntp
$ sudo /etc/init.d/ntpd start 配置ulimit与nproc参数
$ sudo vim /etc/security/limits.conf hdfs - nofile 32768hbase - nofile 32768退出并重新登录SSH使设置生效 2.在hadoop-secondary上安装hbase-master
$ sudo yum install hbase-master
$ sudo yum install hbase-rest
$ sudo yum install hbase-thrift 3.在hadoop-node上安装hbase-regionserver
$ sudo yum install hbase-regionserver 4.在HDFS中创建HBase的目录
以下HDFS操作仅需在任意一台主机上执行一次
$ sudo -u hdfs hadoop fs -mkdir /hbase
$ sudo -u hdfs hadoop fs -chown hbase /hbase 5.配置hbase-site.xml
$ sudo vim /etc/hbase/conf/hbase-site.xml
$ cat /etc/hbase/conf/hbase-site.xml <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration><property><name>hbase.rest.port</name><value>60050</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.rootdir</name><value>hdfs://hadoop-master:8020/hbase</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop-node-1,hadoop-node-2,hadoop-node-3</value></property></configuration>6.配置regionservers
$ sudo vim /etc/hbase/conf/regionservers hadoop-node-1hadoop-node-2hadoop-node-37.安装Zookeeper
$ sudo yum install zookeeper
$ sudo vim /etc/zookeeper/conf/zoo.cfg
$ cat /etc/zookeeper/conf/zoo.cfg tickTime=2000initLimit=10syncLimit=5dataDir=/var/lib/zookeeperclientPort=2181maxClientCnxns=0server.1=hadoop-node-1:2888:3888server.2=hadoop-node-2:2888:3888server.3=hadoop-node-3:2888:38888.在hadoop-node上安装zookeeper-server并创建myid文件
$ sudo yum install zookeeper-server
$ sudo touch /var/lib/zookeeper/myid
$ sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
$ echo 1 > /var/lib/zookeeper/myid //仅在hadoop-node-1上执行
$ echo 2 > /var/lib/zookeeper/myid //仅在hadoop-node-2上执行
$ echo 3 > /var/lib/zookeeper/myid //仅在hadoop-node-3上执行 $sudo /etc/init.d/zookeeper-server init //仅在任一hadoop-node上执行一次
$ sudo /etc/init.d/zookeeper-server start 9.启动Hbase服务
仅在hadoop-master上
$ sudo /etc/init.d/hbase-master start
$ sudo /etc/init.d/hbase-thrift start
$ sudo /etc/init.d/hbase-rest start 仅在hadoop-node上
$ sudo /etc/init.d/hbase-regionserver start 10.查看服务的状态
通过网页查看http://hadoop-master:60010 11.至此,HBase&Zookeeper的搭建就已经完成。 Hadoop集群(CDH4)实践之 (3) Hive搭建本文内容
Hadoop集群(CDH4)实践之 (3) Hive搭建 环境准备
OS: CentOS 6.4 x86_64
Servers:
hadoop-master: 172.17.20.230 内存10G
- namenode
- hbase-master hadoop-secondary: 172.17.20.234 内存10G
- secondarybackupnamenode,jobtracker
- hive-server,hive-metastore hadoop-node-1: 172.17.20.231 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server hadoop-node-2: 172.17.20.232 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server hadoop-node-3: 172.17.20.233 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server 对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务
hbase-master - Hbase的管理服务
hbase-regionServer - 对Client端插入,删除,查询数据等提供服务
zookeeper-server - Zookeeper协作与配置管理服务
hive-server - Hive的管理服务
hive-metastore - Hive的元存储,用于对元数据进行类型检查与语法分析 本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
以下操作都只需要在 Hive 所在主机,即 hadoop-secondary 上执行。 1. 安装前的准备
Hadoop集群(CDH4)实践之 (2) HBase&Zookeeper搭建 2. 安装Hive
$ sudo yum install hive hive-metastore hive-server
$ sudo yum install hive-jdbc hive-hbase 3. 安装MySQL JDBC Connector
$ sudo yum install mysql-connector-java
$ sudo ln -s /usr/share/java/mysql-connector-java.jar/usr/lib/hive/lib/mysql-connector-java.jar 4. 安装MySQL
$ sudo yum install mysql-server $ sudo /etc/init.d/mysqld start $ sudo /usr/bin/mysql_secure_installation
[...] Enter current password for root (enter for none): OK, successfully used password, moving on... [...] Set root password? [Y/n] y New password: hiveserver Re-enter new password: hiverserver Remove anonymous users? [Y/n] Y [...] Disallow root login remotely? [Y/n] N [...] Remove test database and access to it [Y/n] Y [...] Reload privilege tables now? [Y/n] Y All done! 5. 创建数据库并授权
$ mysql -u root -phiveserver
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.10.0.mysql.sql;
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hiveserver';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON metastore.* TO 'hive'@'%';
mysql> REVOKE ALTER,CREATE ON metastore.* FROM 'hive'@'%';
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hiveserver';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON metastore.* TO 'hive'@'localhost';
mysql> REVOKE ALTER,CREATE ON metastore.* FROM 'hive'@'localhost';
mysql> CREATE USER 'hive'@'127.0.0.1' IDENTIFIED BY 'hiveserver';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON metastore.* TO 'hive'@'127.0.0.1';
mysql> REVOKE ALTER,CREATE ON metastore.* FROM 'hive'@'127.0.0.1';
6. 配置hive-site.xml $ sudo vim /etc/hive/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop-secondary/metastore</value>
<description>the URL of the MySQL database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hiveserver</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop-secondary:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
<property>
<name>hive.aux.jars.path</name>
<value>file:////usr/lib/hive/lib/hbase.jar,file:///usr/lib/hive/lib/zookeeper.jar,file:///usr/lib/hive/lib/hive-hbase-handler-0.10.0-cdh4.5.0.jar,file:///usr/lib/hive/lib/guava-11.0.2.jar</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop-node-1,hadoop-node-2,hadoop-node-3</value>
</property>
</configuration>
7. 启动Hive
$ /etc/init.d/hive-metastore start
$ /etc/init.d/hive-server start 8. 创建Hive所需的HDFS目录
$ sudo -u hdfs hadoop fs -mkdir /user/hive
$ sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse
$ sudo -u hdfs hadoop fs -ls -R /user
$ sudo -u hdfs hadoop fs -chown -R hive /user/hive
$ sudo -u hdfs hadoop fs -chmod -R 1777 /user/hive/warehouse $ sudo -u hdfs hadoop fs -chmod -R 777/tmp/hadoop-mapred
$ sudo -u hdfs hadoop fs -chmod -R 777 /tmp/hive-hive
$ sudo chown -R hive:hive /var/lib/hive/.hivehistory 9. 至此,Hive的搭建就已经完成。 Hadoop集群(CHD4)实践之 (4) Oozie搭建本文内容
Hadoop集群(CHD4)实践之 (4) Oozie搭建 环境准备
OS: CentOS 6.4 x86_64
Servers:
hadoop-master: 172.17.20.230 内存10G
- namenode
- hbase-master hadoop-secondary:172.17.20.234 内存10G
- secondarybackupnamenode,jobtracker
- hive-server,hive-metastore
- oozie hadoop-node-1:172.17.20.231 内存10Gsudo yum install hbase-regionserver
- datanode,tasktracker
- hbase-regionserver,zookeeper-server hadoop-node-2:172.17.20.232 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server hadoop-node-3:172.17.20.233 内存10G
- datanode,tasktracker
- hbase-regionserver,zookeeper-server 对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务
hbase-master - Hbase的管理服务
hbase-regionServer - 对Client端插入,删除,查询数据等提供服务
zookeeper-server - Zookeeper协作与配置管理服务
hive-server - Hive的管理服务
hive-metastore - Hive的元存储,用于对元数据进行类型检查与语法分析
oozie - Oozie是一种JavaWeb应用程序,用于工作流的定义和管理 本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
以下操作都只需要在 Oozie 所在主机,即hadoop-secondary 上执行。 1.安装前的准备
Hadoop集群(CDH4)实践之 (3) Hive搭建 2.安装Oozie
$ sudo yum install oozie oozie-client 3.创建Oozie数据库
$ mysql -uroot -phiveserver mysql> create database oozie;mysql> grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'oozie';mysql> grant all privileges on oozie.* to 'oozie'@'%' identified by 'oozie';mysql> exit;4.配置oozie-site.xml
$ sudo vim /etc/oozie/conf/oozie-site.xml |