(初学者强烈推荐)Ubuntu 配置hadoop 超详细教程(全过程)
Posted 头发多呢、
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(初学者强烈推荐)Ubuntu 配置hadoop 超详细教程(全过程)相关的知识,希望对你有一定的参考价值。
引言
本文的教程仅为个人的操作经验所写,每个人下载的版本不一样,所以会出现不同的情况异常等,如有问题可询问博主或百度查找解决方法。
本机的配置环境如下:
hadoop(3.3.1)
jdk版本(jdk-8)
Linux(64位)
1、安装jdk
在Ubuntu中用压缩包安装jdk较为麻烦,需要配置系统环境变量和配置文件,一步出错可能无法使用。所以本文在Ubuntu中使用命令安装jdk。其他方法安装jdk也可。
打开终端
执行以下命令:
sudo apt-get install openjdk-8-jdk
输入y回车,等待安装完成
java -version
安装完成后用 java -version 检验是否安装成功,如果如下图则安装成功
当想要卸载jdk则使用以下命令:sudo apt remove openjdk*
打开环境文件
sudo gedit ~/.bashrc
文件顶部加入以下语句并保存
sudo apt-get install openjdk-8-jdk 命令安装的jdk默认路径为 /usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 #目录要换成自己jdk所在目录
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
使环境生效
source ~/.bashrc
使用 echo $JAVA_HOME 显示JAVA_HOME即为成功
2、安装ssh免密码登录
sudo apt-get install ssh openssh-server
安装完毕后,在终端中依次进行继以下命令操作
cd ~/.ssh/
生成密钥
ssh-keygen -t rsa
将秘钥加入到授权中
cat id_rsa.pub >> authorized_keys
再验证ssh localhost 如下图,不用密码登录即为成功。
3、安装hadoop
1)安装hadoop并解压
镜像下载链接https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/
下载好的压缩包传到 /usr/local/目录下
使用如下命令解压缩Hadoop安装包:
tar -zxvf hadoop-3.1.1.tar.gz
解压完成之后进入hadoop-3.1.1文件内容如下:
2) 配置相关文件
core-site.xml
打开/etc中的core-site.xml 文件,加入如下语句并保存
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.3.1/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
注意其中路径要修改为自己的
hdfs-site.xml
和上面一样,打开/etc中的hdfs-site.xml 文件,加入如下语句并保存
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.3.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.3.1/tmp/dfs/data</value>
</property>
hadoop-env.sh
查看你的 jdk安装目录
echo $JAVA_HOME
打开 hadoop-env.sh 文件配置如下并保存:
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" # 根据自己的路径写
4、运行hadoop
1)首先初始化HDFS系统
在hadop3.3.0目录下使用如下命令进行初始化:
bin/hdfs namenode -format
成功后如下图:
2)开启NameNode和DataNode守护进程
继续运行如下命令开启hadoop
sbin/start-dfs.sh
成功如下图:
3)查看jps进程信息
jps
如下图即为成功
关闭hadoop使用命令 sbin/stop-dfs.sh
打开浏览器输入http://localhost:9870,成功打开
4)创建hadoop用户组
使用/bin/bash作为shell sudo useradd -m hadoop -s /bin/bash
设置密码 sudo passwd hadoop
添加hadoop至管理员权限 sudo adduser hadoop sudo
5、配置yarn
搭建前请保证已经搭建好了HDFS的环境,即配置好所上内容。
1)终端输入hostname查看主机名
hostname
2)打开/etc下yarn-site.xml,在在configuration标签中加入如下,注意主机名要修改为自己的
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--Resource Manager-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>liang-VirtualBox</value><!--你的hostname的主机名-->
</property>
3)打开mapred-site.xml 文件,配置如下(在configuration标签中间加入)
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4)输入命令启动yarn
sbin/start-yarn.sh
jps查看进程信息多了两个东西
成功启动如下图
在浏览器输入主机名:8088 打开成功
6、配置JobHistory(可不配)
JobHistory用来记录已经finished的mapreduce运行日志,日志信息存放于HDFS目录中,默认情况下没有开启此功能,需要在mapred-site.xml、yarn-site.xml配置,并手动启动
mapred-site.xml添加如下配置(在configuration标签中间加入)
<property>
<name>mapreduce.jobhistory.address</name>
<value>主机名:10020</value>
<description>MapReduce JobHistory Server IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>主机名:19888</value>
<description>MapReduce JobHistory Server Web UI host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/history/done_intermediate</value></property>
yarn-site.xml添加如下配置(在configuration标签中间加入)
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
hadoop fs -ls /history查看历史记录
开启history进程
mapred --daemon start historyserver
通过浏览器访问 主机名:19888
成功如下图
至此,hadoop全部配置完成,可下载eclipse进行wordcount等运算实验。
如有任何疑问,请留言,尽仅有所学帮助。
ubuntu上配置好hadoop后,运行MapReduce
ubuntu上配置好hadoop后,运行官网MapReduce教程
初学者,可能有一些做的不好,望大家多多指教。很多错误是因为我不了解linux的操作而造成的失误,一同写出,希望可以帮助到大家。
无需使用eclipse,全部使用命令行。我个人比较习惯使用vim,当然不使用也是可以的,大家根据自己的习惯来使用。
首先先使用
sudo vim ~/.bashrc
命令,确保其中能够有如下配置,特别是HADOOP_CLASSPATH,因为可能在配置hadoop的时候是没有配的,我就是忘记配这个了,会一直报错。
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
官网是以单词计数WordCount.java为例的,WordCount.java代码如下
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens())
word.set(itr.nextToken());
context.write(word, one);
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable>
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException
int sum = 0;
for (IntWritable val : values)
sum += val.get();
result.set(sum);
context.write(key, result);
public static void main(String[] args) throws Exception
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
然后对其进行编译处理,最好单独创建一个文件夹来做实验,然后将WordCount.java和编译好的文件、打包好的wc.jar放在一个包下。在有上述包的文件夹下,打开命令行,输入如下指令
#如果没有配好HADOOP_CLASSPATH,运行第一句会报错,第二句是在哪里运行包打在哪里,所以最好就是在同一个文件夹,第一次写的时候我就是不在同一个文件夹,然后没有写清楚WordCount*.class路径,导致一直写不对
$ bin/hadoop com.sun.tools.javac.Main WordCount.java
$ jar cf wc.jar WordCount*.class
得到的结果如下
接着开始准备输入文件和输出文件,只需要创建input文件,不要创建output文件,否则后面运行会出错,因为运行的时候它会自己创建一个。
在hdfs中怎么添加文件夹呢?代码如下,千万不要在hadoop前面加sudo,会报错说没有该命令。
#创建单级目录
hadoop fs -mkdir input
#创建多级目录
hadoop fs -mkdir -p /user/joe/wordcount/input
准备好了以后,在本地创建两个file01的和file02文件。我是这样创建的
#第一步
sudo vim file01
#第二步 已经进入了vim文本编辑器,按“i”进入编辑模式,在文本编辑器中输入如下内容
Hello World Bye World
#第三步 然后按“Esc”退出文本编辑模式,按“:wq”保存并退出,可以习惯性的输入下面命令(个人习惯)
source file01
按照上述方法创建好了两个本地的file01和file02,但是需要使用的是hdfs中的file01和file02,那么使用如下命令将其上传到hdfs中
#hadoop dfs -put 你的文件路径 hdfs中的路径
#你的路径,如果是在当前文件夹下,可以直接和下面一样这样写,但是不一样的话请复制完整的路径,尽量减少手打,因为很容易错
hadoop dfs -put file* /user/joe/wordcount/input
使用官网的命令进行查看,得到如下图所示
然后使用如下命令运行,一定要注意,不要创建output,会报错。然后如果WordCount和wc.jar不在一个文件夹的,请写好完整的路径。最好还是一个文件夹的方便。
hadoop jar wc.jar WordCount /user/joe/wordcount/input /user/joe/wordcount/output
然后使用如下命令查看output
hadoop fs -cat /user/joe/wordcount/output/part-r-00000
那么,我运行一次了就会有output对吗,有了output我下次运行会报错,那么我如何解决?
第一种,删除就可以了
hadoop fs -rm -r /user/joe/wordcount/output
第二种,改一个输出路径,比如将output改成output1
哈哈哈 就这样就可以做完实验了
以上是关于(初学者强烈推荐)Ubuntu 配置hadoop 超详细教程(全过程)的主要内容,如果未能解决你的问题,请参考以下文章
对于初学者,强烈推荐啥?将图像(个人资料图片,至少 1MB?)存储到数据库或通过文件系统? [复制]
强烈推荐的TensorFlowPytorch和Keras的样例资源(深度学习初学者必须收藏)