Hi,朋友们,我们又见面了,这一次我给大家带来的是Hadoop集群搭建及Hive的安装。
说明一下,网上有很多的教程,为什么我还要水?
第一,大多数的安装都是很顺利的,没有疑难解答。
第二,版本问题,网上的搭建在3以前的比较多。
第三,我想给出一个更简洁的安装教程,把道理说明白,让读者就算在安装的过程中遇到问题也知道问题出在哪,应该朝哪个方向去要解决方案。
Hadoop-3.0.0的集群搭建
hadoop集群的安装,关键在主节点,主节点配置好以后,将主节点复制到其他做数据节点的服务器上就不用管了。
我有三台服务器,ip分别是192.168.12.71,192.168.12.200,192.168.12.201。
以12.71服务器作为主节点,我的hadoop路径是‘/opt/hadoop-3.0.0’首先要在这台服务器上安装一个jdk,我的jdk路径是‘/opt/jdk1.8’。
然后是设置hosts,vim /etc/hots
192.168.12.71 node1
192.168.12.200 node2
192.168.12.201 node3
配置
现在开始做Hadoop主节点的配置工作,我们先到hadoop的 ‘etc/hadoop/’目录下,所有的配置文件都在里面。
- hadoop-env.sh
在这个文件里,增加一行指定Jdk目录
export JAVA_HOME=/opt/jdk1.8 - core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
- hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--下面的是配置namenode和datanode的数据存储位置,若不配置会有默认位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/zhibei/Hadoop/hadoop-3.0.0/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/zhibei/Hadoop/hadoop-3.0.0/data/datanode</value>
</property>
- mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/hadoop-3.0.0/share/hadoop/mapreduce/*:/opt/hadoop-3.0.0/share/hadoop/mapreduce/lib/*</value>
</property>
报错
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster Please check whether your etc/hadoop/mapred-site.xml contains the below configuration:
如果不配置,mapreduce.application.classpath
,则会报以上错误,在你hive数据做插入时现象如下
这个报错是在8088的端口上找到对应的插入日志,然后查看详情,就能看到。
5. yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
- workers
node1
node2
node3
总共配置就是这6项。
然后把hadoop3.0.0这个节点给另外的服务器复制过去。
格式化
主节点的格式化这一步,是非常重要的。执行命令
hadoop-3.0.0/bin/hadoop namenode -format
启动hadoop集群
在使用start-all.sh和stop-all.sh脚本启停脚本之前,先在两个脚本之前添加如下内容。
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
启动 hadoop-3.0.0/sbin/start-all.sh
启动完成之后就是jps命令,jps来自jdk中,首先保证每个节点都有jdk.请把jdk配置出来
vim /etc/profile
#添加如下内容
export JAVA_HOME=/opt/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
完成之后执行
source /etc/profile
在jdk没有在环境中配置时,使用jps命令会报找不到的问题。在配置了jdk环境之后,jps执行出现permission的权限问题,那就需要给jps文件赋权,找到jdk/bin/jps文件,执行
chmod 775 jps
就ok.
接下来就是使用jps查看各服务器中启动的服务。
node1
node2
node3
日志信息可以在hadoop-3.0.0/logs里面查看。等集群启动完成之后就可以访问,相关的网页了。
网页一 http://192.168.12.71:9870/
网页二 http://192.168.12.71:8088/
那么集群的搭建就到这样!
Hive-3.1.3的安装
我的hive路径是’/opt/hive-3.1.3/',和node1节点在同一个服务器。
准备工作
你首先需要有mysql,启动以后,需要创建一个数据库,我创建了一个hivedb供hive存储数据用。下面的配置中会体现。
配置
- hive-site.xml
这个配置文件需要先到hive-3.1.3/conf/
目录下创建,然后添加如下内容
</configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hivedb?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
<!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 为 localhost -->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>hive default warehouse, if nessecory, change it</description>
</property>
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
<property>
<name>hive.in.test</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>Enforce metastore schema version consistency</description>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
</configuration>
- 添加一个mysql的驱动
mysql-connector-java-5.1.40.jar
没有这个驱动,会连接不上数据库,导致meta数据无法存储。
没有驱动,你就会看到failed to load driver
- 初始化元数据
主要就是在对应的mysql数据库中创建一系列的表。命令如下
./bin/schematool -initSchema -dbType mysql -verbose
如果没有成功执行如上命令就直接启动Hive,在做查询操作的时候你就会看到
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
- 启动Hive
./bin/hive
到这里就结束了,纰漏肯定有,说不定你就有一些特殊情况。不妨留言给我!
番外
这里我想说一说的就是千万注意,如果你的系统上有旧的Hadoop,Hive存在的,现在要重新的部署,一定谨慎,因为这会导致数据的不可恢复。
如果只是测试数据,那就无所谓,删掉就的节点,重新配置,一定要重新格式化这一步,不然hadoop是不能成功的。
Hive也是同样,一旦之前Hadoop被覆盖或者架构发生改变,Hive之前的数据也会有损坏的风险。