这里写目录标题
- 一、docker搭建
- 二.安装和配置JAVA环境
- 三.SSH免密登录
- 四.安装Hdoop
- 五、spark-hadoop的搭建
- 六、安装HBase
- 七、安装zookeeper
- 八、安装hive
一、docker搭建
1.本项目搭建在ubuntu系统上,需要ubuntu镜像,一共是三个节点,一个master,两个slave,共需要三个容器,下面是镜像的获取与容器的创建:
获取ubuntu镜像:
docker pull ubuntu
查看已有的镜像
docker images
创建桥接网络,连接宿主机,master和两个slave
docker network create -d bridge spark-net
docker network ls
创建master节点
docker run -itd --name master --network spark-net -h master -p 8888:8888 -p 50070:50070 -p 4040:4040 -p 7077:7077 ubuntu
2.将master提交作为基础镜像
避免重复安装,所以将配置好基础工具的master作为基础镜像
docker commit master base
3.在镜像基础上创建slave1和slave2
docker run -itd --name slave1 --network spark-net -h slave1 base
docker run -itd --name slave2 --network spark-net -h slave2 base
4.创建hadoop账户
adduser hadoop
把hadoop用户加入到hadoop用户组
usermod -a -G hadoop hadoop
查看结果
cat /etc/group |grep hadoop
把hadoop用户赋予root权限
vim /etc/sudoers
添加下面这段
hadoop ALL=(root) NOPASSWD:ALL
二.安装和配置JAVA环境
下载并解压JDK
新建/usr/java目录
tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/java/
配置环境变量
vim ~/.bashrc
在最后加上下列内容(一定注意环境变量后面不要加空格,否则容易出问题,jdk版本号看自己的版本,如果用网盘里的就不用更改)
export JAVA_HOME=/usr/java/jdk1.8.0_161
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
使环境变量生效
source ~/.bashrc
查看java是否安装成功
java -version
三.SSH免密登录
安装并配置SSH
这里首先安装ssh
apt-get install openssh-server
启动ssh
service ssh start
配置ssh
vim /etc/ssh/sshd_config
避免后期在登录root账户的被拒绝,在PermitRootLogin prohibit-password下面添加PermitRootLogin yes
将PasswordAuthentication设为yes
配置免密登录
首先在master上创建ssh-key
ssh-keygen -t rsa -P ""
一直回车
然后在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub
在slave1和slave2上以同样的方式生成
然后分别用(这里的目录无所谓,传到哪里都行,就是将从节点的id_rsa传到主节点上)
scp id_rsa.pub hadoop@master:/tmp/slave1_id_rsa.pub
scp id_rsa.pub hadoop@master:/tmp/slave2_id_rsa.pub
然后将slave1和slave2传过来的id_rsa文件移动到~/.ssh/目录下
mv /tmp/slave1_id_rsa.pub ~/.ssh/slave1_id_rsa.pub
mv /tmp/slave2_id_rsa.pub ~/.ssh/slave2_id_rsa.pub
将id_rsa.pub、slave1_id_rsa.pub、slave2_id_rsa.pub追加到authorized_keys授权文件中
cat *.pub >>authorized_keys
这个时候已经可以免密登录本机了
ssh master
将master上的公钥文件传给slave1和slave2
scp authorized_keys hadoop@slave1:/tmp
scp authorized_keys hadoop@slave2:/tmp
然后将公钥移动到~/.ssh/目录下
cp /tmp/authorized_keys ~/.ssh/authorized_keys
修改公钥文件的权限
chmod 664 authorized_keys
然后测试三个虚拟机是否可以免密登录
master连接slave1和slave2
四.安装Hdoop
master的配置
解压到/usr/local
然后切换到/usr/local将hadoop-2.7.4重命名为hadoop,并给/usr/local/hadoop设置访问权限
cd /usr/local
sudo mv hadoop-2.7.4 hadoop
sudo chmod 777 -R /usr/local/Hadoop
配置.bashsc文件
vim ~/.bashrc
在文件末尾追加
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
执行该命令使环境变量生效
source ~/.bashrc
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
在末尾添加下面内容
export JAVA_HOME=/usr/java/jdk1.8.0_161
export HADOOP=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
在末尾添加
JAVA_HOME=/usr/java/jdk1.8.0_161
进入Hadoop的安装目录,下面操作的路径均是在此目录的基础上的相对路径
cd /usr/local/hadoop
配置core-site.xml
vim etc/hadoop/core-site.xml
将configuration替换为下面内容
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
配置hdfs-site.xml
vim etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
配置yarn-site.xml
vim etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>|
<name>yarn.nodemanager.aux-services</name>|
<value>mapreduce_shuffle</value>|
</property>|
<property>|
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>|
<value>org.apache.hadoop.mapred.ShuffleHandler</value>|
</property>|
<property>|
<name>yarn.resourcemanager.address</name>|
<value>master:8032</value>|
</property>|
<property>|
<name>yarn.resourcemanager.scheduler.address</name>|
<value>master:8030</value>|
</property>|
<property>|
<name>yarn.resourcemanager.resource-tracker.address</name>|
<value>master:8031</value>|
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
</configuration>
配置slave
vim etc/hadoop/slaves
加上两个从节点的主机名即可
slave1
slave2
这个时候master的hadoop已经完全配置好了
接下来将master的hadoop传到slave1和slave2
配置slave1和slave2
scp -r /usr/local/hadoop hadoop@slave1:/usr/local
scp -r /usr/local/hadoop hadoop@slave2:/usr/local
启动Hadoop
在master节点上执行(只在master上执行)
hdfs namenode -format
运行启动脚本
start-all.sh
测试hadoop集群是否正常运行
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar pi 10 10
五、spark-hadoop的搭建
1.解压scala和spark
tar -zxvf scala-2.11.8.tgz
tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz
2.配置环境变量(master、slave1、slave2分别执行)
export SCALA_HOME=/usr/local/scala-2.11.8
export SPARK_HOME=/usr/local/spark-2.4.7-bin-hadoop2.7
export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
source ~/.bashrc
3.配置spark(只在master上配置)
进入conf目录下
cd /usr/local/spark-2.4.7-bin-hadoop2.7/conf/
将spark-env.sh.template、slaves.template分别替换为spark-env.sh、slaves
mv spark-env.sh.template spark-env.sh
mv slaves.template slaves
配置slaves
原来红框处为localhost,改为slave1和slave2
配置spark-env.sh
SPARK_MASTER_WEBUI_PORT=8888
export SPARK_HOME=/usr/local/spark-2.4.7-bin-hadoop2.7
export HADOOP_HOME=/usr/local/hadoop
export MASTER=spark://master:7077
export SCALA_HOME=/usr/local/scala-2.11.8
export SPARK_MASTER_HOST=master
export JAVA_HOME=/usr/java/jdk1.8.0_161
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_WORKER_MERMORY=4G
此时master已经配置好了
4.配置两个slave
只需要将master上配置好的spark传到slave中即可
scp -rp /usr/local/spark-2.4.7-bin-hadoop2.7/ root@slave1:/usr/local/
scp -rp /usr/local/spark-2.4.7-bin-hadoop2.7/ root@slave2:/usr/local/
5.启动spark
进入目录/usr/local/spark-2.4.7-bin-hadoop2.7/sbin
输入spark的启动命令
./start-all.sh
六、安装HBase
- 解压
将下载好的HBase文件上传到Hadoop集群中的master节点
tar -zxvf hbase-1.3.1-bin.tar.gz -C /home/hadoop/
- 修改HBase的配置文件
(1)修改hbase-env.sh文件
新增四项配置
export HBASE_CLASSPATH=/home/hadoop/hadoop-2.6.5/etc/hadoop
export HBASE_PID_DIR=/home/hadoop/hbase-1.3.1/pids
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export HBASE_MANAGES_ZK=false
一个分布式运行的HBase依赖一个Zookeeper集群,所有的节点和客户端都必须能够访问Zookeeper。默认的情况下HBase会管理一个Zookeep集群,即HBase默认自带一个Zookeep集群,这个集群会随着HBase的启动而启动。而在实际的商业项目中通常自己管理一个Zookeeper集群更便于优化配置提高集群工作效率,但需要配置HBase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK来切换,这个值默认是true,作用是让HBase启动的时候同时也启动Zookeeper。在安装过程中,采用独立运行Zookeeper集群的方式,故将其属性值改为false。
(2)修改regionservers文件
regionservers文件负责配置HBase集群中哪台节点做RegionServer服务器,本书的规划是所有slave节点均可当RegionServer服务器,故其配置内容为:
slave1
slave2
(3)修改hbase-site.xml文件
hbase-site.xml文件内容修改为:
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:60000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper-3.4.5/data</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
注意:hbase.zookeeper.quorum用来设置HBase集群中哪些节点安装了ZooKeeper,只能设置为主机名而不是IP地址。HBase1.0 以后的版本,需要手动配置Web访问端口号60010。
(4)分发到slave1和slave2节点
scp -r /home/hadoop/hbase-1.3.1/ slave1:/home/hadoop/
scp -r /home/hadoop/hbase-1.3.1/ slave2:/home/hadoop/
- 修改三个节点的环境变量
在/etc/profile文件末尾添加
export PATH=$PATH:/home/hadoop/hbase-1.3.1/bin
并执行命令"source /etc/profile"使配置的环境变量生效。
4. 测试
在master节点运行start-hbase.sh,将HBase集群启动,可以通过jps或查看运行状况。master节点存在HMaster进程,
slave1和slave2存在HRegionServer进程
通过浏览器访问地址http://master:60010/master-status,可以看到整个HBase集群的状态.
在master节点,使用命令"hbase-daemon.sh stop master",等待一会发现slave1成为master,当HBase的master节点故障后,ZooKeeper会从备份中自动推选一个作为master.
七、安装zookeeper
第一步:下载zookeeeper的压缩包,
下载完成之后,上传到我们的linux的/export/software路径下准备进行安装
第二步:解压
在master主机上,解压zookeeper的压缩包到/usr/local路径下去,然后准备进行安装
cd /export/software
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local
第三步:修改配置文件
在node1主机上,修改配置文件
cd /usr/local/zookeeper-3.4.6/conf/
cp zoo_sample.cfg zoo.cfg
mkdir -p /export/server/zookeeper-3.4.6/zkdatas/
vim zoo.cfg
修改以下内容
#Zookeeper的数据存放目录
dataDir=/export/server/zookeeper-3.4.6/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
第四步:添加myid配置
在node1主机的/export/server/zookeeper-3.4.6/zkdatas/这个路径下创建一个文件,文件名为myid ,文件内容为1
echo 1 > /export/server/zookeeper-3.4.6/zkdatas/myid
第五步:安装包分发并修改myid的值
在node1主机上,将安装包分发到其他机器
第一台机器上面执行以下两个命令
scp -r /export/server/zookeeper-3.4.6/ node2:/export/server/
scp -r /export/server/zookeeper-3.4.6/ node3:/export/server/
第二台机器上修改myid的值为2
echo 2 > /export/server/zookeeper-3.4.6/zkdatas/myid
第三台机器上修改myid的值为3
echo 3 > /export/server/zookeeper-3.4.6/zkdatas/myid
第六步:添加环境变量
vim /etc/profile #添加以下内容,三台都要进行
export ZOOKEEPER_HOME=/export/server/zookeeper-3.4.6
export PATH=:$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
第七步:三台机器启动zookeeper服务
三台机器分别启动zookeeper服务
这个命令三台机器都要执行
/export/server/zookeeper-3.4.6/bin/zkServer.sh start
三台主机分别查看启动状态
/export/server/zookeeper-3.4.6/bin/zkServer.sh status
八、安装hive
安装在hadoop的namenode上(也就是主节点上:node4上),上传安装文件到(可以根据自己的环境,目录可以自定义)/opt/software/apache-hive-2.1.0-bin.tar.gz
解压:
tar –zxvf apache-hive-2.1.0-bin.tar.gz
添加到环境变量
vi /etc/profile
编辑
#hive
export HIVE_HOME=/opt/module/hive/apache-hive-2.1.0-bin
export PATH=$PATH:$HIVE_HOME/bin
保存后使其生效:
source /etc/profile
安装MySQL
apt-get install mysql-server
- 进入hive的conf目录下面复制一下hive-default.xml.template名子命名为:hive-site.xml
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
(1)、<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
(2)、<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
(3)、<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
(4)、 <property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123qwe</value>
<description>password to use against metastore database</description>
</property>
(5)、<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/module/hive/apache-hive-2.1.0-bin /tmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
(6)、<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/module/hive/apache-hive-2.1.0-bin /tmp/resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
(7)、<property>
<name>hive.querylog.location</name>
<value>/opt/module/hive/apache-hive-2.1.0-bin /tmp</value>
<description>Location of Hive run time structured log file</description>
</property>
(8)、<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/opt/module/hive/apache-hive-2.1.0-bin/tmp/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
- 复制hive文件到node5、node6节点:
scp –r /opt/module/hive/ node5:/opt/module/
scp –r /opt/module/hive/ node6:/opt/module/
- 在node4上使用schematool 初始化metastore的schema:
schematool -initSchema -dbType mysql
- 运行hive
[root@node4 mysql]# hive
mysql/hive字符集问题:hive中文乱码
alter database hive character set latin1;
set character_set_client=latin1;