一.背景:
Hadoop环境:2.6.4
Python环境:3.5.X
Spark环境:2.2.0
Hive环境:1.2.2
JDK版本:1.8
二.集群环境:
关于Hadoop集群环境:我自己使用三台机器,一台本地电脑,两台虚拟机。
本地:192.168.60.194 hadoop00(Mac Os) 用户名:zhaoyan 密码:xxx
虚拟机1:192.168.60.69 hadoop01(Centos) 用户名:root 密码:xxx
虚拟机2:192.168.60.70 hadoop02(Centos) 用户名:root 密码:xxx
(这里有一个小坑,本地的用户名和虚拟机的用户名不一样,会造成ssh连接有点问题,后面SSH再说。)
首先修改机器的hosts文件,默认在/etc/hosts下。
三台机器都修改如下:
192.168.60.194 hadoop00
192.168.60.69 hadoop01
192.168.60.70 hadoop02
关于虚拟机和本地的通信使用的是SSH连接。
SSH免密码连接(设置好这个以后SSH连接就不需要每次都输入密码):在本地生成自己的公钥,然后把公钥复制到两台虚拟机的上。因为本地的的用户和虚拟机上的用户不一样,必须在本地的.ssh文件夹下的conf里配置:
Host hadoop01
user root
Host hadoop02
user root
这样在ssh时就知道是连接远端的root用户
三.Hadoop
3.1 . Hadoop安装
安装:到官网上下载编译好的二进制包下载下来就行了。
修改.bash_profile文件,
export HADOOP_HOME=/usr/local/Cellar/hadoop/2.6.4
export PATH=$PATH:/usr/local/Cellar/hadoop/2.6.4/bin
3.2.Hadoop配置
hadoop的配置文件:hadoop配置文件一般下$HADOOP_HOME/etc/Hadoop,集群环境下需要修改如下几个文件:
1).hadoop-env.sh: export JAVA_HOME=本地的JAVA路径
2).hdfs-site.xml:
dfs.replication:副本个数,这里设置为3,刚好有三台机器(默认也是3)
dfs.permissions:权限检查,这里设置关闭,因为本地用户和虚拟机用户不一样,设置设置为false,关闭是解决用户的不同导致hadoop01和hadoop02不能连接到hadoop00的9000端口的问题。(因为在本机用zhaoyan用户启动的namenode,所有zhaoyan是超级用户,root不是)其实不管权限模式是开还是关,chmod,chgrp 和 chown 总是 会检查权限。这些命令只有在权限检查背景下才有用,所以不会有兼容性问题。这样,这就能让管理员在打开常规的权限检查之前可以可靠地设置文件的所有者和权限。
dfs:webhdfs.enabled:在web端能否直接点击进入文件夹(http://localhost:50070端口下使用)
dfs.namenode.name.dir:namenode在本地存放的位置
dfs.datanode.data.dir:datanode在本地存放的位置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/Cellar/hadoop/hdfs/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/Cellar/hadoop/hdfs/tmp/dfs/data</value>
</property>
3).core-site.xml
fs.default.name: hadoop文件系统的位置,这里是放在hadoop00上面的9000端口
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop00:9000</value>
</property>
4).mapred-site.xml
mapreduce.framework.name:mapreduce运行的环境,这里配置为用yarn来运行
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5).slaves
这里写上所有集群中使用到的机器即可
hadoop00
hadoop01
hadoop02
这里在本机上修改好了配置之后,将配置文件复制到虚拟机上即可。
3.3.Hadoop启动:
1).在hadoop的home目录下的bin目录下使用hdfs namenode –format命令初始化文件系统
2).在hadoop的home目录下的sbin下使用start-all.sh启动即可。或者使用start-dfs.sh加上start-yarn.sh这里会运行如下进程,可通过jps查看.就算是成功启动
hadoop00: NameNode, DataNode, SecondaryNameNode, NodeManager, ResourceManager
hadoop01: DataNode,NodeManager
hadoop02: DataNode,NodeManager
因为是在hadoop00上启动的hadoop,所有hadoop00是master,hadoo01和hadoop02是slave。master上面会比slave上面多NameNode和SecondaryNameNode和ResourceManager.
可以通过访问http://hadoop00:50070来访问文件系统
也可以通过http://hadoop00:8088来访问yarn
四.Spark
4.1.Spark安装
安装:到官网上下载编译好的二进制包下载下来就行了。
修改~.bash_profile文件:
export PATH=$PATH:/usr/local/Cellar/spark/2.2.0/bin
export SPARK_HOME=/usr/local/Cellar/spark/2.2.0
4.2 . Spark配置
1).spark-env.sh
exportSCALA_HOME=/usr/local/Cellar/scala/2.12.4
exportJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
export SPARK_WORKER_MEMORY=1g //work节点运行的内存大小
export HADOOP_HOME=$HADOOP_HOME exportSTANDALONE_SPARK_MASTER_HOST=hadoop00
export SPARK_MASTER_IP=$STANDALONE_SPARK_MASTER_HOST
export SPARK_LAUNCH_WITH_SCALA=0
exportSPARK_LIBRARY_PATH=${SPARK_HOME}/jars
exportSCALA_LIBRARY_PATH=${SCALA_HOME}/lib
exportSPARK_MASTER_WEBUI_PORT=18080
if [ -n"$HADOOP_HOME" ]; then
export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:${HADOOP_HOME}/lib/native
fi
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
2).slaves
hadoop00
hadoop01
hadoop02
这里在本机上修改好了配置之后,将配置文件复制到虚拟机上即可。
4.2 . Spark启动
1)在hadoop00上的SPARK_HOME目录下的sbin目录中:
start-master.sh –h hadoop00
start-slave.sh spark://hadoop00:7077
2)在hadoop01上的SPARK_HOME目录下的sbin目录中:
start-slave.shspark://hadoop00:7077
3)在hadoop02上的SPARK_HOME目录下的sbin目录中:
start-slave.shspark://hadoop00:7077
启动完成之后增加的进程.
hadoop00:Master Worker
hadoop01:Worker
hadoop02:Worker
也可以通过Web页面进行访问:http://hadoop00:10080(默认为8080,在启动中对端口进行了修改)
五.Hive:
5.1.Hive安装
安装:到官网上下载编译好的二进制包下载下来就行了。
修改~.bash_profile文件:
export HIVE_HOME=/usr/local/Cellar/hive/1.2.2
export PATH=$PATH:/usr/local/Cellar/hive/1.2.2/bin
5.2.创建元数据库
mysql>create database metastore;
mysql>create user 'hive'@'localhost'identified by 'pwd';
mysql>grant select,insert,update,delete,alter,create,index,referenceson metastore.* to'hive'@'localhost';
mysql>flush privileges;
5.3.Hive配置
1).hive-env.sh
HADOOP_HOME=/usr/local/Cellar/hadoop/2.6.4
export HIVE_CONF_DIR=/usr/local/Cellar/hive/1.2.2/conf
export HIVE_AUX_JARS_PATH=/usr/local/Cellar/hive/1.2.2/lib
2).hive-site.xml
hive.metastore.warehouse.dir:hive数据在HDFS中的目录
hive.exec.scratchdir:hive在HDFS中的临时目录
hive.exec.local.scratchdir:hive的本地临时目录
hive.downloaded.resources.dir:hive下载的本地临时目录
javax.jdo.option.ConnectionURL:元数据连接的URL,这里我们使用mysql
javax.jdo.option.ConnectionDriverName:连接的驱动,这里我们使用mysql,需要把mysql的connect的jar包拷贝到hive的lib目录下
javax.jdo.option.ConnectionUserName:mysql的用户名hive
javax.jdo.option.ConnectionPassword:mysql密码
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore</value>
</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>pwd</value>
</property>
5.4.初始化库
在HIVE_HOME的bin目录下执行schematool –initSchema –dbType mysql,执行之后我们可以看到在mysql的metastore库中会生成一系列表,就表示成功了。