环境准备
1.首先修改hosts文件,以自己实验ip为准。(master中进行)
vim /etc/hosts
然后直接将hosts文件复制到从节点中
scp /etc/hosts root@slave1:/etc/hosts
scp /etc/hosts root@slave2:/etc/hosts
2.开启zookeeper(三台机器)
进入zookeeper安装目录,直接开启zookeeper。
/usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh start
/usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status
3.开启hadoop(master进行)
/usr/hadoop/hadoop-2.7.3/sbin/start-all.sh
hadoop集群开启之后,就可以在此基础上安装hive了
注意:
实验中我们选用hive的远程模式,slave2安装mysql-server用于存放元数据,slave1作为hive server作为thrift 服务器,master作为client客户端进行操作。
Slave2上安装mysql-server
1.环境中,我们已经配置过本地源了。所以这里不用下载yum源,我们直接安装mysql server即可。
安装MySQL:yum -y install mysql-community-server
2.启动服务
重载所有修改过的配置文件:systemctl daemon-reload
开启服务:systemctl start mysqld
开机自启:systemctl enable mysqld
3.安装完毕后,MySQL会在/var/log/mysqld.log这个文件中会自动生成一个随机的密码,获取得这个随机密码,以用于登录MySQL数据库:
获取初密码:grep "temporary password" /var/log/mysqld.log
登陆MySQL:mysql -uroot -p
(注意中英文)
4.MySQL密码安全策略设置:
设置密码强度为低级:set global validate_password_policy=0;
设置密码长度:set global validate_password_length=4;
修改本地密码:alter user 'root'@'localhost' identified by '123456';
退出:\q
密码强度分级如下:
0为low级别,只检查长度;
1为medium级别(默认),符合长度为8,且必须含有数字,大小写,特殊字符;
2为strong级别,密码难度更大一些,需要包括字典文件。
密码长度最低长为4,当设置长度为1、2、3时,其长度依然为4。
- 设置远程登录
以新密码登陆MySQL:mysql -uroot -p123456
创建root用户:create user 'root'@'%' identified by '123456';
添加远程登录用户:grant all privileges on *.* to 'root'@'%' with grant option;
刷新权限:flush privileges;
master、slave1上创建工作路径,解压hive
1.首先我们需要创建工作路径,并将hive解压。环境中master作为客户端,slave1作为服务器端,因此都需要使用到hive。因为hive相关安装包存放在master中,因此我们先在master中对hive进行解压,然后将其复制到slave1中。
master中操作如下:
cd /opt/soft
ls
mkdir -p /usr/hive
tar -zxvf /opt/soft/apache-hive-2.1.1-bin.tar.gz -C /usr/hive/
2.同样slave1上建立文件夹/usr/hive,master中将安装包远程复制到
slave1
scp -r /usr/hive/apache-hive-2.1.1-bin root@slave1:/usr/hive/
3.修改/etc/profile文件设置hive环境变量。(master和slave1都执行)
vim /etc/profile
#set hive
export HIVE_HOME=/usr/hive/apache‐hive‐2.1.1‐bin
export PATH=$PATH:$HIVE_HOME/bin
生效环境变量:
source /etc/profile
slave1作为hive server,进行配置
1.因为服务器端需要和Mysql通信,所以服务器端需要Mysql的lib安装包到Hive_Home/conf
目录下。
注意:mysql.jar放在slave2中的/lib目录下,需要将其远程复制到slave1的hive的lib中。
首先slave2中进行如下操作:
查看lib:ls /lib
远程复制依赖包到slave1:scp /lib/mysql-connector-java-5.1.5-bin.jar root@slave1:/usr/hive/apache-hive-2.1.1-bin/lib
2.回到slave1,修改hive-env.sh文件中HADOOP_HOME环境变量。进入hive配置目录,因为hive中已经给出配置文件的范本hive-env.sh.template,直接将其复制一个进行修改即可:
cd $HIVE_HOME/conf
ls
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
hive-env.sh文件中修改HADOOP_HOME环境变量,内容如下:
HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
3.修改hive-site.xml文件
vim hive-site.xml
添加内容如下:
<configuration>
<!-- Hive产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 数据库连接JDBC的URL地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<!-- 数据库连接driver,即MySQL驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- MySQL数据库用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- MySQL数据库密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
master作为客户端,进行配置
1.解决版本冲突和jar包依赖问题。
由于客户端需要和Hadoop通信,所以需要更改Hadoop中jline的版本。即保留一个高版本的jline jar包,从hive的lib包中拷贝到Hadoop中lib位置为/usr/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib
cp /usr/hive/apache-hive-2.1.1-bin/lib/jline-2.12.jar /usr/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/
2.修改hive-env.sh中HADOOP_HOME环境变量:
HADOOP_HOME=/usr/hadoop/hadoop‐2.7.3
3.修改hive-site.xml:
<configuration>
<!-- Hive产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!--- 使用本地服务连接Hive,默认为true-->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!-- 连接服务器-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave1:9083</value>
</property>
</configuration>
启动hive
1.slave1作为服务器端,开启hive server。
bin/hive --service metastore
2.master作为客户端,启动hive。
bin/hive
测试hive是否启动成功:
hive>show databases;
3.最后复制一个master,查看其进程如下:
jps
Hbase环境搭建
注意开启hbase之前,需要将之前的hadoop集群开启
start-all.sh
(启动hadoop)
zkServer.sh start
(各个节点均执行)
创建路径:mkdir -p /usr/hbase
解压缩:tar -zxvf /opt/soft/hbase-1.2.4-bin.tar.gz
添加环境变量:
在/etc/profile中添加
在三个节点中都要添加
export HBASE_HOME=/usr/hbase/hbase-1.2.4
export PATH=$HBASE_HOME/bin:$PATH
source /etc/profile
修改配置文件:conf/hbase-env.sh
export HBASE_MANAGES_ZK=false
xport JAVA_HOME=/usr/java/jdk1.8.0_171
解释:
一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false。
3.配置conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/zookeeper/zookeeper-3.4.10/</value>
</property>
</configuration>
解释:要想运行完全分布式模式,加一个属性 hbase.cluster.distributed 设置为 true 然后把 hbase.rootdir 设置为HDFS的NameNode的位置
hbase.rootdir:这个目录是region server的共享目录,用来持久化Hbase。URL需要是’完全正确’的,还要包含文件系统的scheme
hbase.cluster.distributed :Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。在hbase-site.xml配置zookeeper:当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。
hbase.zookeeper.property.clientPort:ZooKeeper的zoo.conf中的配置,客户端连接的端口。
hbase.zookeeper.property.dataDir:ZooKeeper的zoo.conf中的配置。对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在 hbase-site.xml中设置。
配置conf/regionservers
master
slave1
slave2
在这里列出了希望运行的全部 HRegionServer,一行写一个host (就Hadoop里面的 slaver 一样)。列在这里的server会随着集群的启动而启动,集群的停止而停止
分发hbase
运行hbase : start-hbase.sh