HIVE安装
解压并创建软连接
tar -xzvf hive-1.1.0-cdh5.10.0.tar.gz
ln -s hive-1.1.0-cdh5.10.0 hive
配置文件
hive-log4j.properties
hive.log.dir=/root/data/hive/logs
hive-env.sh
export HADOOP_HOME=/root/app/hadoop
export HIVE_CONF_DIR=/root/app/hive/conf
hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.230.1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
</property>
</configuration>
启动 HDFS 与 YARN 服务 Hive服务启动
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/yarn-daemon.sh start resourcemanager
*******************cdh1***********************
26112 QuorumPeerMain
39937 NameNode
46146 ResourceManager
40227 JournalNode
40484 DFSZKFailoverController
46245 NodeManager
40038 DataNode
46727 Jps
*******************cdh2***********************
26256 QuorumPeerMain
35140 NameNode
41254 ResourceManager
35304 JournalNode
35498 DFSZKFailoverController
35211 DataNode
41326 Jps
40990 NodeManager
*******************cdh3***********************
31905 DataNode
35473 NodeManager
26221 QuorumPeerMain
35710 Jps
31998 JournalNode
启动 hive 服务
bin/hive
测试运行
CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS
TERMINATED BY '\t' ;
vi /root/app/hive/stu.txt
00001 zhangsan
00002 lisi
00003 wangwu
00004 zhaoliu
load data local inpath '/root/app/hive/stu.txt' into table stu;
select * from stu;
启动 hiveserver2
bin/hive --service hiveserver2 #前台启动
nohup bin/hive --service hiveserver2 &#后台启动
启动 beeline
./beeline #进入beeline
beeline> !connect jdbc:hive2://cdh1:10000
...
Enter username for jdbc:hive2://cdh1:10000: root
Enter password for jdbc:hive2://cdh1:10000: ***
...
0: jdbc:hive2://cdh1:10000> select * from stu;
...
0: jdbc:hive2://cdh1:10000> !quit
Hive 与 HBase 集成
集群设计
Hdfs集群搭建设计
服务进程 | 服务器分配 | 说明 |
zookeeper | cdh1,cdh2,cdh3 | Zookeeper集群 |
namenode | cdh1,cdh2 | namenode高可用 |
Datanade | cdh1,cdh2,cdh3 | 数据节点 |
Joulnalnode | cdh1,cdh2,cdh3 | 同步信息节点 |
Zfll | cdh1,cdh2 | 故障转移 |
Yarn集群设计
服务进程 | 服务器分配 | 说明 |
ResourceManger | cdh1,cdh2 | cdh1,cdh2高可用 |
NodeManger | cdh1,cdh2,cdh3 | namenode高可用 |
Zkfl | cdh1,cdh2 | 未独立出来的服务,包含在ResourceManger的进程中 |
Joulnalnode | cdh1,cdh2,cdh3 | 存储节点为zookeeper集群 |
HBASE集群设计
服务进程 | 服务器分配 | 说明 |
HMaster | cdh1,cdh2 | cdh1,cdh2高可用 |
HRegionServer | cdh1,cdh2,cdh3 | HRegionServer |
Hive服务设计
服务进程 | 服务器分配 | 说明 |
RunJar | cdh1 | hiveserver2服务 |
RunJar | cdh1 | beeline服务 |
配置文件
hive-site.xml
#在 hive-site.xml 文件中配置 Zookeeper,hive 通过这个参数去连接 HBase 集群
<property>
<name>hbase.zookeeper.quorum</name>
<value>cdh1,cdh2,cdh3</value>
</property>
hive-env.sh
#在 hive-env.sh 添加 hbase 环境变量
export HBASE_HOME=/root/app/hbase
创建hbase表
//插入数据
insertData("user","101");
insertData("user","102");
public static void insertData(String tablename,String row){
Table table = hbaseUnit.getTable(tablename);
Put put = new Put(Bytes.toBytes(row));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"), Bytes.toBytes("xiaozhang"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("age"), Bytes.toBytes("28"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("birthday"), Bytes.toBytes("1979-09-18"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("company"), Bytes.toBytes("alibaba"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("contry"), Bytes.toBytes("China"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("province"), Bytes.toBytes("shandong"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("city"), Bytes.toBytes("qingdao"));
try {
table.put(put);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
hbaseUnit.closeTable(table);
hbaseUnit.closeConnection();
}
}
创建hive外部表
create external table user(id string,name string,age string,birthday
string,company string,contry string,province string,city string) STORED
BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH
SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:name,cf:age,cf:birthday,cf:company,cf:contry,cf:province,cf:city")
TBLPROPERTIES("hbase.table.name" = "user");
演示效果
select * from user
select count(*) from user
相关服务
*******************cdh1***********************
26112 QuorumPeerMain
39937 NameNode
46146 ResourceManager
40227 JournalNode
40484 DFSZKFailoverController
46245 NodeManager
40709 HMaster
50501 RunJar
40038 DataNode
40824 HRegionServer
50296 RunJar
51836 Jps
*******************cdh2***********************
26256 QuorumPeerMain
44481 Jps
35140 NameNode
41254 ResourceManager
35672 HRegionServer
35304 JournalNode
35498 DFSZKFailoverController
35771 HMaster
35211 DataNode
40990 NodeManager
*******************cdh3***********************
31905 DataNode
35473 NodeManager
32155 HRegionServer
26221 QuorumPeerMain
31998 JournalNode
38111 Jps
[root@cdh1 ~]# netstat -anp|grep 10000
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 50296/java
tcp 0 0 192.168.230.128:33806 192.168.230.128:10000 ESTABLISHED 50501/java
tcp 0 0 192.168.230.128:10000 192.168.230.128:33806 ESTABLISHED 50296/java