sudo useradd -m hadoop -s /bin/bash # 创建新用户
sudo passwd hadoop # 为新用户设置密码
sudo adduser hadoop sudo # 为新用户设置权限
su hadoop # 切换到新用户
sudo apt-get update
集群,单节点模式都需要用到ssh登录,默认ubuntu上面已经有ssh client,还需要安装ssh server
之后的操作如何各种输入密码就很麻烦,所以我们配置不需要密码登录
sudo apt-get install openssh-server
exit
ssh-keygen -t rsa # 全部按enter就可以了
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
这个时候再用ssh localhost就不需要输入密码了。
我们使用hadoop3.1.3版本需要JDK1.8版本以上,这里我们推荐手动下载tar.gz安装包来手动安装。
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
sudo tar -xzvf /home/hadoop/jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
设置环境变量:
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc
java -version
https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
sudo tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local/
cd /usr/local/
sudo mv ./hadoop-3.1.3/ ./hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
./bin/hadoop version # 最后查看是否安装成功
单机模式不需要修改任何配置
我们可以执行一些他自带的例子来试运行hadoop,我们选择运行grep例子,将input文件夹中文件作为输入,筛选统计单词出现的次数,将结果输入到output文件夹中。
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看运行结果
最后我们能看到符合正则的单词dfsadmin出现了1次
Hadoop可以单节点上以伪分布式的方式运行,Hadoop进程以分离的java进程来运行,节点既是NameNode也是DataNode,读取的是HDFS中的文件
现在我们来修改Hadoop的配置文件以支持伪分布式,配置文件在./etc/hadoop
目录下
core-site.xml
:<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>file:/usr/local/hadoop/tmpvalue>
<description>Abase for other temporary directories.description>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://localhost:9000value>
property>
configuration>
hdfs-site.xml
:<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/usr/local/hadoop/tmp/dfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/usr/local/hadoop/tmp/dfs/datavalue>
property>
configuration>
如果需要从伪分布式模式切换回非分布式模式,需要删除core-site.xml 中的配置项
然后我们需要进行格式化:
cd /usr/local/hadoop
./bin/hdfs namenode -format
然后我们看到下面的结果就证明格式化成功了
开启NameNode和DataNode守护进程:./sbin/start-dfs.sh
也可以使用./sbin/start-all.sh
来启动所有组件,然后用jps
来check是否启动成功:
启动成功后我们可以访问web界面: http://localhost:9870
查看界面或者在线查看HDFS中的文件
我们有三种方式来执行hadoop命令:
hadoop fs # 适用于任何不同的文件系统
hadoop dfs # 只适用于HDFS文件系统
hdfs dfs # 和上面一样
单机模式运行grep实例读取的是本地数据,伪分布式读取的是HDFS上面的数据,首先创建用户目录:
./bin/hdfs dfs -mkdir -p /user/hadoop
我们需要将之前使用的文件作为输入文件复制到HDFS中:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input
查看文件列表:./bin/hdfs dfs -ls input
然后我们计算:./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
查看运行结果,这个是看的是位于HDFS中的结果:./bin/hdfs dfs -cat output/*
这里需要注意的是:Hadoop运行程序时,输出目录不能存在,否则会报错,如果要再次执行需要删除output文件夹
./bin/hdfs dfs -rm -r output