一、 软件版本信息.......................................................................................................... 1
二、 集群分布信息.......................................................................................................... 2
三、 虚拟机固定ip.......................................................................................................... 2
五、 配置config文件....................................................................................................... 5
六、 配置免密码登陆....................................................................................................... 6
七、 配置java环境.......................................................................................................... 7
八、 配置zookeeper......................................................................................................... 8
九、 配置hadoop............................................................................................................ 11
十、 启动hadoop集群.................................................................................................... 16
十一、 配置hbase.......................................................................................................... 17
十二、 配置hive............................................................................................................ 19
十三、 配置sqoop.......................................................................................................... 21
一、软件版本信息
1.zookeeper:zookeeper-3.4.7
2.hadoop:hadoop-2.7.1
3.hbase:hbase-1.1.2-bin
4.hive:apache-hive-1.0.1
5.sqoop:sqoop-1.4.6
6.jdk:jdk1.8.0_65
二、集群分布信息
三、虚拟机固定ip
1.vitrualbox 配置
在vitrualbox主页面点击管理按钮后找到全局设定,点击
出现如下图所示的小框
点击网络------>点击仅主机模式----->在右边点击+号,新建一个虚拟网卡。
回到vitrualbox主界面
右键点击你所创建的虚拟机(所有虚拟机都要),选择设置。
找到网络并点击,选择网卡2,勾选启动网络连接,连接方式选择仅主机模式,之后点击确定。(所有用来部署集群的机子都要这样子设置)
2.修改interface文件(每台机子都要)
分别进入每一台虚拟机,执行如下操作:
①sudo vi /etc/network/interfaces 回车
②按i键,在最后一行加入
auto eth1
iface eth1 inet static
address 192.168.56.101 //对应你要设置的静态ip
netmask 255.255.255.0 //子网掩码
③按esc,接着按shift+zz保存退出
④sudo reboot 重启虚拟机
按照以上步骤配置好每一台机子即可。
四、配置主机名与ip的映射关系
分别进入每台虚拟机执行如下步骤
①sudo vi /etc/hosts
②按2dd,删除文本最上面2行
③在文本最上面加入主机名与ip的映射关系
192.168.56.101 zwj1
192.168.56.102 zwj2
192.168.56.103 zwj3
192.168.56.104 zwj4
192.168.56.105 zwj5
192.168.56.106 zwj6
192.168.56.107 zwj7
④按esc,之后按shift +zz保存退出
五、配置config文件
①在zwj1的终端上输入:ssh-keygen -t rsa,之后连续按四下回车。
②输入cd:~/.ssh +回车
③输入touch config
④vi config
⑤在里面加入如下内容
Host zwj1
user zwj1
Host zwj2
user zwj2
Host zwj3
user zwj3
Host zwj4
user zwj4
Host zwj5
user zwj5
Host zwj6
user zwj6
Host zwj7
user zwj7
保存退出
⑥将该配置文件复制到其他机子上,命令如下
scp config zwj2:~/.ssh 后回车输入zwj2的密码
scp config zwj3:~/.ssh 后回车输入zwj3的密码
scp config zwj4:~/.ssh 后回车输入zwj4的密码
scp config zwj5:~/.ssh 后回车输入zwj5的密码
scp config zwj6:~/.ssh 后回车输入zwj6的密码
scp config zwj7:~/.ssh 后回车输入zwj7的密码
六、配置免密码登陆
在每台机子上执行如下步骤
①ssh-keygen -t rsa,之后连续按四下回车。
②ssh-copy-id zwj1 输入zwj1密码
ssh-copy-id zwj2 输入zwj2密码
ssh-copy-id zwj3 输入zwj3密码
ssh-copy-id zwj4 输入zwj4密码
ssh-copy-id zwj5 输入zwj5密码
ssh-copy-id zwj6 输入zwj6密码
ssh-copy-id zwj7 输入zwj7密码
③验证免密码登陆
执行完以上步骤之后,可以使用ssh zwj1(任意一台虚拟机)+回车,如果不用输入密码就可以远程登陆的话,证明免密码登陆成功。
七、配置java环境
①在每台虚拟机的根目录上创建environment目录,并修改该目录的权限为777
sudo mkdir /environment
sudo chmod 777 /environment
②将jdk从实体机拷贝到每台虚拟机上(实体机也要先执行上面四、五两个步骤)
scp -r /environment/jdk zwj1:/environment
scp -r /environment/jdk zwj2:/environment
scp -r /environment/jdk zwj3:/environment
scp -r /environment/jdk zwj4:/environment
scp -r /environment/jdk zwj5:/environment
scp -r /environment/jdk zwj6:/environment
scp -r /environment/jdk zwj7:/environment
③在每台虚拟机上配置环境变量
sudo vi /etc/profile
在文件最下面加入如下环境变量
JAVA_HOME=/environment/jdk1.8.0_65
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
CLASSPATH=.:$JAVA_HOME/lib
export CLASSPATH
保存退出
之后终端输入
source /etc/profile +回车,使环境变量生效
八、配置zookeeper
①实体机子上解压zookeeper:
tar -zxvf zookeeper-3.4.7
②修改zookeeper conf目录下的配置文件
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
在文件中找到dataDir=/tmp/zookeeper。
③将光标移动该处,按i进入insert模式。将保存数据的路径更改为非tmp目录下(因为tmp目录下的内容机器重启之后就不见了),这里,本人将路径修改为dataDir=/environment/zookeeper/data
其他默认的配置基本无需修改,只需在该文件的最后一行增加集群配置内容(只需修改下面的主机名,与你自己部署zookeeper的服务器地址相同即可)
服务器编号,服务器地址,LF通信端口,选举端口
server.1=zwj4:2888:3888
server.2=zwj5:2888:3888
server.3=zwj6:2888:3888
保存退出
③将修改好的zookeeper 拷贝到虚拟机上
scp -r /zk(zookeeper的路径)zwj4:/environmet
scp -r /zk(zookeeper的路径)zwj5:/environmet
scp -r /zk(zookeeper的路径)zwj6:/environmet
③在zk的虚拟机上创建data目录(zwj4-zwj6)
因为刚刚修改dataDir路径时的文件夹并不存在,所以要先创建该文件夹
sudo mkdir /environment/zookeeper/data
④创建myid文件(zwj4-zwj6)
cd /environment/zookeeper/data
touch myid
vi myid
在里面加入一个数字,对应上面server.1=zwj4:2888:3888
中sever后面的数字
(在zwj4上,myid文件里的内容为1
在zwj5上,myid文件里的内容为2
在zwj6上,myid文件里的内容为3)
⑤往环境变量中加入zookeeper的环境变量(zwj4-zwj6)
sudo vi /etc/profile
在最下面面加入
ZK_HOME=/environment/zookeeper/bin
PATH=$PATH:$ZK_HOME
export PATH
保存,退出。
source /etc/profile
⑥验证zk集群是否部署成功
在zwj4-zwj6上分别启动zk:
zkServer.sh start
之后查看zwj4-zwj6上面zk的状态
zkServer.sh status
可以看到三台中有一台的状态是
Mode: leader
其他两台的状态是
Mode: follower
证明zk集群部署成功。
九、配置hadoop
①在主机上解压hadoop
tar -zxvf hadoop-2.7.1.tar.gz
②进入hadoop目录中的etc/hadoop目录下
③修改hadoop-env.sh
vi hadoo-env.sh
在里面找到export JAVA_HOME=
将等号后面的值替换成虚拟机里面的java环境变量
如:export JAVA_HOME=/environment/jdk1.8.0_65
④修改core-site.xml
vi core-site.xml,将<configuration>替换成如下内容
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/enviroment/hadoop-2.7.1/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>zwj4:2181,zwj5:2181,zwj6:2181</value>
</property>
</configuration>
⑤修改hdfs-site.xml
vi hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>zwj1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>zwj1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>zwj2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>zwj2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://zwj4:8485;zwj5:8485;zwj6:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/enviroment/hadoop-2.7.1/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>~/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
⑥修改mapred-site.xml
vi mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
⑦修改yarn-site.xml
vi yarn-site.xml
<configuration>
<!-- 开启RM高可靠 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>zwj3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>zwj7</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>zwj4:2181,zwj5:2181,zwj6:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
⑧将配置好的hadoop拷贝到每台虚拟机上
scp -r /hadoop(hadoop所在目录) zwj1:/environment
scp -r /hadoop(hadoop所在目录) zwj2:/environment
scp -r /hadoop(hadoop所在目录) zwj3:/environment
scp -r /hadoop(hadoop所在目录) zwj4:/environment
scp -r /hadoop(hadoop所在目录) zwj5:/environment
scp -r /hadoop(hadoop所在目录) zwj6:/environment
scp -r /hadoop(hadoop所在目录) zwj7:/environment
⑨修改salves里面的内容(slaves是指定子节点的位置,因为要在zwj1上启动HDFS、在zwj3启动yarn,所以zwj1上的slaves文件指定的是datanode的位置,zwj3上的slaves文件指定的是nodemanager的位置)
将里面的内容替换成
zwj4
zwj5
zwj6
⑩配置hadoop的环境变量(zwj1-zwj7)
sudo vi /etv/profile
在最后面加入如下内容
export HADOOP_HOME=/environment/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
十、启动hadoop集群
第一次启动的时候一定要严格按照下面的步骤来,之后启动只要启动hdfs跟yarn就可以
①启动zk(zwj4-zwj6都要)
启动命令:zkServer.sh start
②启动journalnode(zwj4-zwj6都要)
启动命令:hadoop-daemon.sh start journalnode
之后用jps命令检查,可以看到该机子的进程里多了一个JournalNode进程
③格式化HDFS(zwj1上执行)
hdfs namenode -format
④格式化zk(zwj1上执行)
hdfs zkfc -formatZK
⑤启动HDFS(zwj1上执行)
start-dfs.sh
⑥启动YARN(zwj3跟zwj7上执行)
start-yarn.sh
十一、配置hbase
①将hadoop集群的配置文件:hdfs-site.xml和core-site.xml 放到hbase的/conf目录下
②修改hbase-env.sh
找到export JAVA_HOME=,将后面的内容修改成你机子上java所在的目录
③修改hbase-site.xml
去掉里面所有原有的内容,加入如下配置
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name> <value>itcast04:2181,itcast05:2181,itcast06:2181</value>
</property>
</configuration>
Vi backup-masters
④修改regionservers
去掉原有的localhost,将作为region的几个主机名写到里面:
zwj3
zwj4
zwj5
zwj6
⑤启动zookeeper集群(zwj4-zwj6)
zkServer.sh start
⑥启动dfs(zwj1)
start-dfs.sh
⑦启动hbase,在主节点(zwj1)上运行
start-hbase.sh
hbase集群配置成功的标识:
访问192.168.56.101:16010
页面正常显示,并且可以看到几台作为region的机子的状态,那么就是配置成功了。
十二、配置hive
①安装mysql(zwj4上面安装)
因为hive的元数据库基于mysql,所以要先安装mysql
sudo apt-get install mysql-server
安装过程中会提示设置密码,设置成你自己想要的密码即可,比如123123
安装完成之后,登陆mysql
mysql -u root -p+回车
输入安装过程中设置的密码
之后会出现:mysql>
这样的字符,表示登陆成功,此时输入:
grant all privileges on *.* to [email protected]‘%‘ identified by ‘123123‘;+回车
给root设置可以远程登陆
输入flush privileges刷新刚刚的配置
输入exit退出mysql
在zwj4的终端输入 sudo vi /etc/mysql/my.cnf
找到bind-address = 127.0.0.1
在前面加上#号,注释掉该设置,到这里,mysql已经可以实现远程登陆的功能了。
②安装hive(zwj4)
解压hive: tar -zxvf apache-hive-1.0.1-bin.tar.gz
拷贝mysql的数据库连接驱动到hive的lib目录下
将hive-default.xml重命名为hive-site.xml
清空hive-site.xml里所有的内容,并加入以下
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://zwj3:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</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>123123</value>
<description>password to use against metastore database</description>
</property>
</configuration>
配置成功的标识:进入hive的bin目录。./hive之后启动没有报错,最后出现hive>这样的字样,即表明hive启动成功。
十三、配置sqoop
解压sqoop到任意一台机子(zwj3),无需修改任何配置。
进入sqoop的bin目录,执行导出操作:
./sqoop import --connect jdbc:mysql://zwj4:3306/mysql --table user --username root --password 123123
执行成功的话证明配置没错。(此处连接的数据库必须先设置好允许远程登陆,且登陆的用户必须具有导出数据的权限)