Hadoop集群搭建
*环境:
*jdk1.8
*hadoop2.7
*CentOS7
*条件
192.168.84.169 node1
192.168.84.171 node2
192.168.84.172 node3
*前提
*集群中的节点时间同步
*CentOS7的时间同步:
yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
ntpdate -u cn.pool.ntp.org
*CentOS6的时间同步
在node2与node3上分别输入下述命令:
ntpdate node1
*软件版本问题:搭建之前一定要参照官方文档提供的版本对应关系!一定注意!!!!(血的教训)
*SSH免密登陆(后面配置中我提及了!不必担心)
*关闭防火墙
CentOS6与CentOS7关闭防火墙的指令是不一致的:
*CentOS6:service iptables stop
*CentOS7:systemctl stop firewalld
*开始
下述操作都是现在node1(192.168.84.169)上进行的:
1.apache官网下载xxx.tar.gz
2.解压 tar -zxvf xxx.tar.gz
3.如果感觉解压后的文件名比较长,可以使用mv命令给文件重命名
例如:mv a.txt b.txt 把a.txt重命名为b.txt
4. 更改主机名
在 /etc/sysconfig/network 目录下输入以下内容:
NETWORKING=yes
HOSTNAME=master
在 /etc/hosts 目录下输入下述内容:
192.168.84.169 node1
192.168.84.171 node2
192.168.84.172 node3
5. 配置NameNode
vi /pzz/hadoop-2.7.0/etc/hadoop/core-site.xml
<!-- HDFS的入口,指定NameNode的位置!注意value值master是我的主机名,也可以写IP,一般不要写localhost,写了localhost别的机器就无法访问了-->
<property>
<name>fs.default.name</name>
<value>hdfs://node1:9000</value>
</property>
<!-- Hadoop的工作目录,若是不指定会在/tmp目录下建立工作目录,但是下次启动时tmp下的数据会消失。所以建议指定一个工作目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop</value>
</property>
6. vi /pzz/hadoop-2.7.0/etc/hadoop/hdfs-site.xml
<!-- 我的实验环境是3台虚拟机,一个node作为NameNdoe使用,另外2个作为DataNode使用!因为DataNode中的block的副本不可以放在同一个DataNode的原因,所以文件的副本数是不会超过DataNode的数量的-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 浏览器访问URL-->
<property>
<name>dfs.http.address</name>
<value>node1:50070</value>
</property>
<!-- 配置 SecondaryNameNode 启动在那个节点上(SecondaryNameNode最好不要与NameNode在一个节点上)-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
【注意】SecondaryNameNode在Hadoop1.x中是配置在master文件中的!
7. 配置DataNode
vi /pzz/hadoop-2.7.0/etc/hadoop/slaves
node2
node3
8. 在/pzz/hadoop-2.7.0/etc/hadoop/yarn-site.xml文件中配置ResourceManager:
*设置resourcemanager的节点信息
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>node1:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>node1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>node1:8032</value>
</property>
【注意】未配置ResourceManager信息的其他节点自动成为NodeManager
9. 配置SSH的免密登陆
本机的SSH免密登陆
* ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa // 生成密钥文件到~/.ssh/目录
* cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys //把公钥放到本地~/.ssh/authorized_keys文件中
-------------------------------------------------------------------------------------------------
*scp ~/.ssh/id_dsa.pub root@node2:~ //该命令是在node1上执行的,就是把对应目录下的公钥文件拷贝到node2对应的目录下
*输入登陆密码:hadoop
*在node2机器上对应的目录上输入以下命令:
cat id_dsa.pub >> ~/.ssh/authorized_keys //把公钥放到本地~/.ssh/authorized_keys文件中
上述操作实现了node1到node2的免密登陆!node1到node3的免密,或是node2到node3的免密等等都是同上的!
【注意】:免密登陆的核心就是把一台机器上的公钥内容追加到另一台机器的~/.ssh/authorized_keys文件中,由此实现一台机器到另一台机器的免密登陆!
10. 把hadoop的conf目录下的配置文件拷贝到node2与node3的hadoop的conf目录下,也就是实现三台机器一致的配置文件
保证三台机器的配置文件完全一致:
scp ./pzz/hadoop-2.7.0/etc/hadoop/* root@node2:/pzz/hadoop-2.7.0/etc/hadoop/
scp ./pzz/hadoop-2.7.0/etc/hadoop/* root@node3:/pzz/hadoop-2.7.0/etc/hadoop/
在hadoop的sbin目录下输入以下指令:
hdfs namenode -format //格式化,HDFS会在/usr/hk目录下创建文件
在sbin启动HDFS
./start-dfs.sh
11. 查看集群中节点的工作状态
方式一:浏览器浏览
*在 C:\Windows\System32\drivers\etc\hosts 目录下输入下述内容:
192.168.84.169 node1
192.168.84.171 node2
192.168.84.172 node3
*在浏览器输入URL:http://node1:50070
若是不显示相应的web界面,则关闭防火墙:CentOS6与CentOS7关闭防火墙的指令是不一致的:
*CentOS6:
service iptables stop
*CentOS7
systemctl stop firewalld
一般情况下,所有的操作之前都要关闭防火墙!!!
方式二:linux命令
*在sbin目录下输入: hadoop dfsadmin -report
若是成功实现了Hadoop集群的搭建,则在web界面就会看到提示的2个Live datanode(注意这里是DataNode)
Zookeeper集群搭建:
*下载、解压包
*把/pzz/zookeeper-3.4.5/conf/zoo_sample.cfg文件改名:zoo.cfg
*在zoo.cfg文件中配置下述内容:
dataDir=/usr/zookeeper
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
*在/usr/zookeeper目录下创建myid文件,并在文件内容中写上1或是2或是3,也就是上述zoo.cfg中配置server编号!node1节点文件内容写1,node2写2,node3写3.
HBase集群的搭建:
*配置hbase-site.xml
<property> <!--连接NN -->
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
</property>
<property><!--允许分布式 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property><!--zk集群数据目录-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/zookeeper</value>
</property>
<property><!--zk集群节点地址-->
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
*配置reginservers,指定HRegionServer机器地址
node1
node2
node3
*配置hbase-env.sh
*指定jdk目录 export JAVA_HOME=/pzz/jdk1.8
*允许使用自定义的zk集群 export HBASE_MANAGES_ZK=false(默认值是true,默认使用hbase自带的zk集群,现在自定义了zk集群,所以赋值false就可以允许hbase集群使用自定义的zk集群了)
*把hadoop的hdfs-site.xml文件拷贝到habse的conf目录下
上述操作完成了完全分布式的HBase集群的搭建!!!!
【注意】HBase集群的启动顺序:
*关闭防火墙
*查看集群内的节点是否时间同步
*在zookeeper集群的每一个节点的机器上启动zk服务
*在node1上启动hadoop集群
*在node1上启动hbase集群,node1成为HMaster
使用phoenix连接HBase集群(注意版本):
*下载、解压包
*将phoenix-4.9.0-HBase-1.1-client.jar和phoenix-core-4.9.0-HBase-1.1.jar两个jar包拷贝至Hbase的/lib文件夹
*将Hbase的配置文件base-site.xml拷贝至Phoenix根目录中的/bin文件夹下到此就完成了配置。
*phoenix连接的前提是zookeeper、hadoop、hbase集群都启动了
./bin/sqlline.py node1,node2,node3:2181
JAVA客户端用phoenix连接HBase集群:
*把phoenix-4.9.0-HBase-1.1-client.jar和phoenix-core-4.9.0-HBase-1.1.jar放到路径下
*把core-site.xml hdfs-site.xml hbase-site.xml 文件拷贝到根目录
*jdk1.7或是jdk1.8
*在windows的hosts文件中指定机器名与IP关系 C:\Windows\System32\drivers\etc\hosts
192.168.84.169 node1
192.168.84.171 node2
192.168.84.172 node3
*下述代码:
private static Connection con;
private static PreparedStatement ps;
private static ResultSet rs;
static {
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
con = DriverManager.getConnection("jdbc:phoenix:node1,node2,node3");
}catch(Exception e) {
e.printStackTrace();
}
}
//测试
public static void main(String[] args) throws Exception {
System.out.println("----------success---------");
}
*获取连接之后就可以进行CRUD操作了,实现SQL操作NoSQL数据库!