常见版本
不收费的Hadoop版本主要有三个(均是国外厂商),分别是:Apache(最原始的版本,所有发行版均基于这个版本进行改进)、Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH)、Hortonworks版本(Hortonworks Data Platform,简称“HDP”),对于国内而言,绝大多数选择CDH版本,本次也是用CDH进行演示。
安装步骤
-
第一步肯定是下载啦,这是下载地址,不过需要说明的是一定要下载对应版本的cdh,如果你hadoop下载的是cdh5.15.1,那么hbase也要下载这个版本,否则可能会有jar包冲突的问题。本次我们就是用5.15.1的版本。
当然,你也完全可以直接用wget命令下载到服务器。 -
第二步就是上传到服务器,我是用FlieZilla,不会的小伙伴可以自行百度一下,然后解压,随你解压到哪里(命令参考:tar -zxvf hadoop-2.6.0-cdh5.15.1.tar.gz -C 指定路径)。
-
第三步就是添加HADOOP_HOME/bin到系统环境变量,这里有两种级别的:
1)系统级:/etc/profile
2)用户级:~/.bash_profile
这里推荐用用户级别的,操作过程都是一样的:$ vim ~/.profile $ export HADOOP_HOME=你的解压路径 $ source ~/.profile
完成后,就可以直接用cd $HADOOP_HOME进入目录了
-
修改Hadoop配置文件
etc/hadoop/hadoop-env.sh#设置JAVA_HOME export JAVA_HOME=/data/jdk1.8.0_191 #重新指定 SSH 端口,由于公司禁止22端口,所以把端口改为了23559,一般不需要添加这个 export HADOOP_SSH_OPTS="-p 23559"
etc/hadoop/core-site.xml:
<configuration> <property> #hdfs地址,hostname配置为阿里云内网地址,若配置为ip的话,在用java调用的时候会有问题 <name>fs.defaultFS</name> <value>hdfs://hostname:9000</value> </property> </configuration>
etc/hadoop/hdfs-site.xml:
<configuration> <property> #设置副本系数 <name>dfs.replication</name> <value>1</value> </property> <property> #临时文件目录,重新制定位置,防止重启后数据丢失 <name>hadoop.tmp.dir</name> <value>/data/hadoop-2.6.0-cdh5.15.1/tmp</value> </property> </configuration>
-
设置SSH免密码登录
1)检查你当前是否可以用免密码登录$ ssh localhost
2)如果不可以就要执行以下命令
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
常见目录说明
- bin:客户端命令包
- etc/hadoop:配置文件包
- sbin:服务器端命令包,启动相关进程脚本
- share:常用例子
启动
第一次启动时需要执行一个格式化的命令
$ bin/hdfs namenode -format
启动命令
$ sbin/start-dfs.sh
完成后用 jps 查看是否启动成功,至此本地伪分布式部署就完成了。
踩坑
在用Java连接到HDFS的时候一直都连不上,后来看防火墙也没有开,阿里的安全组也设置了端口范围,最后发现是因为重启服务器的时候hadoop服务被关了。。。
所以可以先用
netstat -ltnp
检查一下端口是否启动了,然后看一下etc/hadoop/core-site.xml这个文件配置的地址是否为阿里内网的地址。
还有一点,在Java端上传文件的时候,总是报错,"File xxx could only be replicated to 0 nodes instead of minReplication (=1)."后来查了很多资料发现,因为阿里内外网的原因,NameNode返回的是内网ip,而客户端用内网ip肯定找不到这个DataNode,所以需要配置本地 hosts 文件为外网id,服务器 hosts 文件为内网ip,还需要在代码中配置一个属性configuration.set("dfs.client.use.datanode.hostname", "true");
这样就可以成功上传文件啦~
参考链接