Hadoop小白,从头开始学习Hadoop ~
1.安装 虚拟机 CentOS 6.6,配置网络
2. 配置CentOS 主机名
方法1:vim /etc/sysconfig/network (重启生效)
NETWORKING=yes
HOSTNAME=star
方法2: hostname star (立即生效)
途中碰到的问题:
Problem 1: ssh: Could not resolve hostname star: Temporary failure in name resolution
1. vi /etc/hosts 查看主机名和 ip 地址是否对应
2. source /etc/hosts
Problem 2: 当在终端执行sudo命令时,系统提示“star is not in the sudoers file”:
其实就是没有权限进行sudo,解决方法如下(这里假设用户名是star):
1.切换到超级用户:$ su
2.打开/etc/sudoers文件:$vim /etc/sudoers
3.修改文件内容:
找到“root ALL=(ALL) ALL”一行,在下面插入新的一行,内容是“star ALL=(ALL) ALL”,然后在 vim键入命令“:wq!”保存并退出。
注:这个文件是只读的,不加“!”保存会失败。
4.退出超级用户:$ exit
3. 安装jdk 1.7 以上,配置环境变量
查询jdk版本: yum search java|grep jdk
安装jdk : yum install java-1.8.0-openjdk
查询jdk所在目录(which java查询到的是java的执行路径,不是安装路径):
配置环境变量: vi /etc/profile
source /etc/profile 使之立即生效。
java -version 验证jdk是否生效
查看环境变量:
echo $JAVA_HOME
echo $CLASSPATH
echo $PATH
4. Hadoop伪分布式安装
复制 hadoop 压缩包到虚拟机
解压 : tar-xzvf hadoop-2.9.1.tar.gz
解压后,压缩包里的文件如下:
配置环境变量: vi/etc/profile
source /etc/profile 使配置的环境变量生效
配置Hadoop:
vi hadoop-env.sh
原来hadoop-env.sh里面的是: export JAVA_HOME=${JAVA_HOME} 但容易报错,所以可以直接写死。
vi core-site.xml
vi hdfs-site.xml
mv mapred-site.xml.template mapred-site.xml (改名字)
vi mapred-site.xml
vi yarn-site.xml (指定YARN的老大(ResourceManager)的地址)
关闭Linux防火墙: sudo service iptables stop (下次还会启动)
关闭防火墙自启动服务: sudo chkconfig iptables status
sudo chkconfig iptables --list
sudo chkconfig iptables stop
sudo chkconfig iptables --list (下图是关闭之后的状态)
5. 启动Hadoop集群
第一次启动hadoop需要初始化: hadoop namenode -format (低版本的命令)
高版本的改为: hdfs namenode -format
遇到的问题: ERROR namenode.NameNode: Failed to start namenode. (粗心,之前的配置文件里面有单词拼错)
启动hdfs
sbin里有系统启动管理的脚本
把sbin加入环境变量
遇到问题:bash: start-dfs.sh: command not found 将命令改成sh start-dfs.sh
遇到问题:jps命令找不到
解决办法参考(https://blog.csdn.net/leshami/article/details/78562642):
vi slaves
启动yarn
在浏览器中访问Hadoop服务
编辑Windows中 C:\Windows\System32\drivers\etc\hosts,配置虚拟域名。
遇到问题:在Windows中用浏览器访问hadoop失败,但Linux中访问成功。最开始的时候,Linux中访问也不成功,后来重启虚拟机和电脑就成功了。
6. 测试环境
1. 测试HDFS
(1)上传一个文件到HDFS:
hadoop fs -put hadoop-2.9.1.tar.gz hdfs://star:9000/
遇到问题:bash: hadoop: command not found
解决方法:需要将hadoop/bin路径加入PATH,配置环境变量(检查之前配的环境变量有没有拼写错误)
sudo vi /etc/profile
source /etc/profile
(2)从HDFS中下载文件
hadoop fs -get hdfs://star:9000/hadoop-2.9.1.tar.gz
2. 测试MapReduce
cd app/hadoop-2.9.1/share/hadoop/mapreduce
Example 1
hadoop jar hadoop-mapreduce-examples-2.9.1.jar pi 5 5
Example 2
vi test.txt
hadoop fs -mkdir hdfs://star:9000/wordcount 在HDFS建目录
命令行中可简写 hadoop fs -mkdir /wordcount (在这里的根目录指的是HDFS中的根目录,不是本地根目录)
hadoop jar hadoop-mapreduce-examples-2.9.1.jar wordcount /wordcount/input /wordcount/output
查看运行结果:
hadoop fs -ls /wordcount/output
hadoop fs -cat /wordcount/output/part-r-00000
ps:Hadoop开启关闭调试信息(在/etc/profile中设置)
开启:export HADOOP_ROOT_LOGGER=DEBUG,console
关闭:export HADOOP_ROOT_LOGGER=INFO,console