转载自:http://9e5c59010c22a6c31d3eaa06.racktom.com/
hadoop+zookeeper+hbase 安装 2011-05-27 14:34 一 机器 192.168.0.203 hd203: hadoop namenode & hbase HMaster 192.168.0.204 hd204: hadoop datanode & hbase HRegionServer
& zookeeper 192.168.0.205 hd205: hadoop datanode & hbase HRegionServer & zookeeper 192.168.0.206 hd206: hadoop datanode & hbase HRegionServer & zookeeper 192.168.0.202 hd202: hadoop second namenode & hbase HMaster 共 5 台机器 (生产环境需要把 zookeeper 单独安装) 二 操作系统和软件版本
1 操作系统:CentOS release 5.6 (Final)x64,关闭防火墙 2 相关软件: jdk-6u24-linux-x64.bin hadoop-0.20.2-cdh3u0.tar.gz hbase-0.90.1-cdh3u0.tar.gz zookeeper-3.3.3-cdh3u0.tar.gz 三 安装 1 安装 jdk (所有机器) mkdir /usr/java mv jdk-6u24-linux-x64.bin /usr/java chmod 744 jdk-6u24-linux-x64.bin
./jdk-6u24-linux-x64.bin ln -s jdk1.6.0_24 default 2 建立集群平台用户 (所有机器) useradd cbcloud passwd cbcloud 密码设为 123456
3 编辑/etc/hosts (所有机器) 192.168.0.203 hd203 192.168.0.204 hd204 192.168.0.205 hd205 192.168.0.206 hd206 192.168.0.202 hd202 4 hd203 登录集群所有机器免密码设置 (hd203)
su - cbcloud ssh 登录本机也要免密码 如下设置 $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 将 hd203 上的 id_dsa.pub 文件追加到所有机器的 cbcloud 用户的 authorized_keys 文件内 细节不在详述 ssh 所有机器 第一次需要确认一下 5 安装 hadoop
5.1 建立目录 (所有机器) mkdir /home/cbcloud/hdtmp mkdir /home/cbcloud/hddata mkdir /home/cbcloud/hdconf chown -R cbcloud:cbcloud 以上目录 tar zxvf hadoop-0.20.2-cdh3u0.tar.gz -C /home/cbcloud cd /home/cbcloud mv hadoop-0.20.2-cdh3u0 hadoop chown -R cbcloud:cbcloud hadoop/
5.2 配置环境变量 vi /etc/profile (所有机器) export JAVA_HOME=/usr/java/default export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export HADOOP_HOME=/home/cbcloud/hadoop export HADOOP_CONF_DIR=/home/cbcloud/hdconf export PATH=$PATH:$HADOOP_HOME/bin 把 hadoop 的配置文件目录从源目录拿出来,方便以后升级 hadoop mv hadoop 的 conf 目录内文件到/home/cbcloud/hdconf 内 5.3 编辑 hadoop 配置文件 core-site.xml 加入 <configuration> <property>
<name>fs.default.name</name> <value>hdfs://hd203:9000</value> </property> <property> <name>fs.checkpoint.dir</name> <value>/home/cbcloud/hdtmp/dfs/namesecondary</value> <description>Determines where on the local filesystem the DFS secondary name node should
store the temporary images to merge. If this is a comma-delimited list of directories then the image is
replicated in all of the directories for redundancy. </description> </property> <property> <name>fs.checkpoint.period</name> <value>60</value> <description>Determines
where on the local filesystem the DFS secondary name node should store the temporary images to merge. If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy. </description> </property> 5.4 编辑
hdfs-site.xml 加入 <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.data.dir</name> <value>/home/cbcloud/hddata</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/cbcloud/hdtmp/</value> </property>
<property> <name>dfs.balance.bandwidthPerSec</name> <value>10485760</value> </property> <property> <name>dfs.hosts.exclude</name> <value>/home/cbcloud/hdconf/excludes</value> <final>true</final> </property> 5.5 编辑 mapred-site.xml 加入 <property> <name>mapred.job.tracker</name>
<value>hd203:9001</value> </property> 5.6 编辑 hadoop-env.sh export JAVA_HOME=/usr/java/default 5.7 编辑 masters 该文件指定 secondary name 机器, 加入 hd202 编辑 slaves
加入 hd204 hd205 hd206 5.8 拷贝 hd203 的 hadoop 和 hdconf 到所有机器 # scp -r /home/cbcloud/hadoop cbcloud@hd204:/home/cbcloud # scp -r /home/cbcloud/hdconf cbcloud@hd204:/home/cbcloud 完成后,在 hd203 格式化 hadoop 文件系统 执行 hadoop namenode -format 启动 start-all.sh 查看集群内 datanode
的机器 执行 jps 5764 Jps 18142 DataNode 18290 TaskTracker 看到以上结果 说明启动正确 web 方式 http://hd203:50070/dfshealth.jsp 注意 本地 PC hosts 文件也要配置 192.168.0.203 hd203 192.168.0.204 hd204 192.168.0.205 hd205 192.168.0.206 hd206 192.168.0.202 hd202 web 方式可以查看集群状态和 job 状态等,至此
hadoop 安装完毕 6 安装 zookeeper (hd203) tar zxvf zookeeper-3.3.3-cdh3u0.tar.gz -C /home/cbcloud 在 hd204-hd206 上 mkdir /home/cbcloud/zookeeperdata
chown -R cbcloud:cbcloud /home/cbcloud/zookeeperdata chown -R cbcloud:cbcloud /home/cbcloud/zookeeper-3.3.3-cdh3u0 编辑 /home/cbcloud/zookeeper-3.3.3-cdh3u0/conf/zoo.cfg
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory
where the snapshot is stored. dataDir=/home/cbcloud/zookeeperdata # the port at which the clients will connect clientPort=2181 server.1=hd204:2888:3888 server.2=hd205:2888:3888 server.3=hd206:2888:3888 scp hd203 的 zookeeper 到 hd204,hd205,hd206 # scp -r /home/cbcloud/zookeeper-3.3.3-cdh3u0/
cbcloud@hd205:/home/cbcloud/ 在 hd204-206 的/home/cbcloud/zookeeperdata 目录 touch myid 文件, 内容分别为 1,2,3 和 server 编号一致 chown cbcloud:cbcloud myid 启动 zookeeper,在 hd204-206 上 bin 目录下 执行 # zkServer.sh start 启动后 通过 # zkServer.sh status 查看状态 注意 在 centos5.6 上 执行这个会报错
Error contacting service. It is probably not running. 通过查看脚本 是因为 echo stat | nc -q 1 localhost nc 版本不同,没有-q 的参数,更改脚本去掉-q 1 即可 另外 可以通过 echo stat | nc localhost 2181 来查看状态 7 安装 hbase 7.1 建立目录 (所有机器) mkdir /home/cbcloud/hbconf chown -R cbcloud:cbcloud /home/cbcloud/hbconf
tar zxvf hbase-0.90.1-cdh3u0.tar.gz -C /home/cbcloud cd /home/cbcloud mv hbase-0.90.1-cdh3u0 hbase chown -R cbcloud:cbcloud hbase/ 7.2 配置环境变量 vi /etc/profile
(所有机器) 追加如下内容 export HBASE_CONF_DIR=/home/cbcloud/hbconf export HBASE_HOME=/home/hadoop/hbase 把 hbase 的配置文件目录从源目录拿出来,方便以后升级 hbase mv hbase 的 conf 目录内文件到/home/cbcloud/hbconf 内 7.3 编辑 hbase-env.sh export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError
-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode" export JAVA_HOME=/usr/java/default export HBASE_MANAGES_ZK=false export HBASE_HOME=/home/cbcloud/hbase export HADOOP_HOME=/home/cbcloud/hadoop 7.4 编辑 hbase-site.xml 加入 <property> <name>hbase.rootdir</name> <value>hdfs://hd203:9000/hbase</value>
</property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master</name> <value>hd203:60000</value> </property> <property> <name>hbase.master.port</name> <value>60000</value> <description>The port master
should bind to.</description> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hd204,hd205,hd206</value>
</property> 7.5 编辑 regionservers 加入 hd204 hd205 hd206 scp hd203 的 hbase 到 hd204-206,202 # scp -r /home/cbcloud/hbase/ cbcloud@hd204:/home/cbcloud # scp
-r /home/cbcloud/hbconf/ cbcloud@hd204:/home/cbcloud su - cbcloud 启动 hbase 在 hd203 上 hbase 的 bin 目录执行 $ ./start-hbase.sh 启动 hbase 的第二个 HMaster 在 202 上执行 $ ./hbase-daemon.sh start master 查看 Master:http://hd203:60010/master.jsp 此时查看 datanode 服务器 jps 5764 Jps
32091 HRegionServer 18142 DataNode 11221 QuorumPeerMain 18290 TaskTracker 以上结果说明启动正常 至此 hadoop+zookeeper+hbase 安装完成 启动顺序 1.hadoop 2.zookeeper 3.hbase 4.第二个 HMaster 停止顺序 1.第二个 HMaster, kill-9 删除 2.hbase 3.zookeeper 4.hadoop 注意 一定要按顺序停止,
如果先停 zookeeper 再停 hbase 的话,基本停不下来(自己测试结果) 接下来的文章 将对集群的使用进行发布
一 、简介
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表, 并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。 其优点是 学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce
应用,十分适合数据仓库的统计分析。 Hive 与 HBase 的整合功能的实现是利用两者本身对外的 API 接口互相进行通信,相互通信 主要是依靠 hive_hbase-handler.jar 工具类, 大致意思如图所示:
二、安装步骤:
1 .Hadoop 和 Hbase 都已经成功安装了
Hadoop 集群配置:http://www.linuxidc.com/Linux/2012-02/53632.htm Hbase 安装配置:http://www.linuxidc.com/Linux/2012-02/54225.htm
2 . 拷贝 hbase-0.90.4.jar 和 zookeeper-3.3.2.jar 到 hive/lib 下。
注意:如何 hive/lib 下已经存在这两个文件的其他版本(例如 zookeeper-3.3.2.jar), 建议删除后使用 hbase 下的相关版本。
2. 修改 hive/conf 下 hive-site.xml 文件,在底部添加如下内容:
[html] 1. <!-2. <property> 3. 4. 5. 6. </property> 7. --> 8. 9. <property> 10. 11. 13. 14. <property> 15. 16. 17. 18. </property> <name>hive.aux.jars.path</name>
<value>file:///usr/local/hive/lib/hive-hbase-handler-0.8.0.jar,file:///usr/local/h ive/lib/hbase-0.90.4.jar,file:///usr/local/hive/lib/zookeeper-3.3.2.jar</value> <name>hive.querylog.location</name> <value>/usr/local/hive/logs</value> <name>hive.exec.scratchdir</name>
<value>/usr/local/hive/tmp</value>
12. </property>
注意: 如果 hive-site.xml 不存在则自行创建, 或者把 hive-default.xml.template 文件改 名后使用。
3. 拷贝 hbase-0.90.4.jar 到所有 Hadoop 节点(包括 master)的 hadoop/lib 下。
4. 拷贝 hbase/conf 下的 hbase-site.xml 文件到所有 hadoop 节点(包 括 master)的 hadoop/conf 下。
注意,如果 3,4 两步跳过的话,运行 hive 时很可能出现如下错误:
[html] 1. [html] view plaincopy 2. org.apache.Hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to Zo oKeeper but the connection closes
immediately. 3. This could be a sign that the server has too many connections (30 is the default). C onsider inspecting your ZK server logs for that error and 4. then make sure you are reusing HBaseConfiguration as often as you can. See HTable's javadoc for
more information. at org.apache.hadoop. 5. hbase.zookeeper.ZooKeeperWatcher.
三、启动 Hive
1.单节点启动
#bin/hive -hiveconf hbase.master=master:490001
2 集群启动:
#bin/hive -hiveconf hbase.zookeeper.quorum=node1,node2,node3 如何 hive-site.xml 文件中没有配置 hive.aux.jars.path,则可以按照 如下方式启动。 bin/hive --auxpath /usr/local/hive/lib/hive-hbase-handler-0.8.0.jar,
/usr/local/hive/lib/hbase-0.90.5.jar, /usr/local/hive/lib/zookeeper-3.3.2.jar -hiveconf hbase.zookeeper.quorum=node1,node2,node3
四、测试:
1.创建 hbase 识别的数据库:
[plain] 1. CREATE TABLE hbase_table_1(key int, value string) 2. STORED BY 'org.apache.Hadoop.hive.hbase.HBaseStorageHandler' 3. WITH SERDEPROPERTIES ("hbase.columns.mapping"
= ":key,cf1:val") 4. TBLPROPERTIES ("hbase.table.name" = "xyz");
hbase.table.name 定义在 hbase 的 table 名称 hbase.columns.mapping 定义在 hbase 的列族
2.使用 sql 导入数据
1) 新建 hive 的数据表: CREATE TABLE pokes (foo INT, bar STRING); 2)批量插入数据: hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE 3)使用
sql 导入 hbase_table_1: hive> INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;
3. 查看数据
hive> select * from hbase_table_1;
这时可以登录 Hbase 去查看数据了 #bin/hbase shell hbase(main):001:0> describe 'xyz' hbase(main):002:0> scan 'xyz' hbase(main):003:0> put 'xyz','100','cf1:val','www.360buy.com'
这时在 Hive 中可以看到刚才在 Hbase 中插入的数据了。
4 hive 访问已经存在的 hbase
使用 CREATE EXTERNAL TABLE:
[plain] 1. CREATE EXTERNAL TABLE hbase_table_2(key int, value string) 2. STORED BY 'org.apache.Hadoop.hive.hbase.HBaseStorageHandler' 3. WITH SERDEPROPERTIES
("hbase.columns.mapping" = "cf1:val") 4. TBLPROPERTIES("hbase.table.name" = "some_existing_table");
内容参考:http://wiki.apache.org/Hadoop/Hive/HBaseIntegration