1.0 hadoop的认识
the apache hadoop project develops open-source software for reliable, scalable, distributed compting.
主要有四个组件:
Common:The common utilities that support the other Hadoop modules.
HDFS:Hadoop Distributed File System
YRAN:job 的资源调度平台
MapReduce:分析计算框架
HDFS是一个分布式的存储系统,
补充:一个安装虚拟机的只是点,VMnet0:用于虚拟桥接网络下的虚拟交换机;VMnet8:用于NAT虚拟网络下的虚拟交换机。
1.1.0 HDFS集群的快速入门
hdfs集群中的机器扮演者不同的角色,分为两类的核心角色:
1.主节点:有一台,叫namenode
2.从节点:有无数台,叫datanode
准备工作:主机名,ip,映射,jdk.
先安装好一台虚拟机,然后克隆出两台,因为linux系统会使用udev动态管理设备文件,虚拟机会自动为网卡生成新的mac地址,因为Linux不允许存在相同的mac地址,所以会在网卡eth0上加1变成eth1,为了能联通网络就要修改
第一步:先查看下主机名
vi /etc/sysconfig/network 修改主机名就可以了。
第二步:去这个目录下修改网卡的名字 /etc/udev/rules.d/70-persistent-net.rules
第三步:修改ip,删除UUID和HWADDR 然后重启虚拟机就OK ,因为删除网卡信息虚拟机就不会为你创建新的网卡了,他会探寻已知的网卡,这样集群才能实现网络互通!
第四步:查看下防火墙,要全部关闭。
入坑指南
搞了一天半的时间终于把集群搭建起来了,中间遇到了好多的问题和坑,好久没有配置了,很多东西都忘记了,然后各种报错,各种问题。
从头开始讲吧,先安装好一台虚拟机,克隆是两台。
先配置虚拟机的网路,配置子网ip,0网段的,网关设成2,
先用root用户登录,去设置/etc/sudoers这个文件,把 hadoop用户添加进去,就可以使用root用户的权限了。
查看本机的ip,把ip设置为静态的,不然每次启动ip会不一样,两种方法:
第一种:setup命令,直接点就ok,网关和V8路由器网关要一样,
第二种:vi /etc/sysconfig/network-scripts/ifcfg-eth0(root用户)
修改ip,(其它两台要删除UUID和hwaddr,并进去/etc/udev/rules.d/70-persistent-net.rules把eth1修改成eth0),然后保存并退出。
修改主机名:/etc/sysconfig/network
做主机名跟ip映射:/etc/hosts
三台都做好以后
做免密登录,记得要在hadoop的home目录下输入命令,ssh-keygen -t rsa 三个回车即可;分发秘钥,ssh-copy-id 用户名@主机名/目录
如果直接ssh-copy-id 主机名 的话会默认root用户,你远程会登陆到对方root用户。做好免密登录之后就可以安装软件了。
注意:先要查看一下,已经存在的jdk版本,因为linux系统会自带一个jdk
sudo rpm -qa|grep java,然后通过sudo rpm -y remove 包名卸载掉全部。
一:压缩包,直接解压到指定的目录,然后配置环境变量就OK
配置环境变量,可以配/home/hadoop/.bash_profile也可以配置/etc/profile/。
解压命令:tar -zxvf 包名 -C app
二:解压hadoop目录,配置环境,变量,再配置hadoop-env.sh,修改jdk的目录
直接配置高可用吧。
先的安装zookeeper,解压,配置环境变量,什么的都不用说了,还需要配置两个东西,
1.配置conf下的zoo.cfg
修改一下dataDir这个目录,这个目录不会自己创建,需要手动去你指定的目录下创建这个文件夹。里面放一个文件叫myid,就是代表zookeeper的id是多少,选举要用。
在最后面指定,server.1的主机是那台,内部端口,外部端口是多少
server.1=gec-hadoop-master:2888:3888(三台都要写,不然不知道server.1是谁。。。)
去创建dataDir指定的目录,然后把myid写进去。
zookeepeer就搞定了。
下面配置hadoop的HA
fs.defaultFS
hdfs://ns1/
hadoop.tmp.dir
/usr/hadoop/hdpdata
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>tourbis:2181,dfs-node02:2181,dfs-node03:2181</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<configuration>
<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>gec-hadoop-master:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>gec-hadoop-master:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>gec-hadoop-slave01:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>gec-hadoop-slave01:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://gec-hadoop-master:8485;gec-hadoop-slave01:8485;gec-hadoop-slave02:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/app/journaldata</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>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
有点长,自己改改就好了,分发到另外两台,连同zookeeper一起,还有环境变量,最后要修改myid。
好了之后就可以启动zookeeper了,再启动jounalnode(三台都启动) 然后再格式化,namenode在一台上格式化就ok了,把hdpdata这个目录分发过去。
到其中一台namenode上执行hdfs zkfc -formatZK
然后启动集群。查看页面是否正常访问。
安装hive