ubuntu18.04安装Hadoop

不迷路,欢迎关注笔者微信公众号:


​​​​​​​

 

安装部分参考https://blog.youkuaiyun.com/qjk19940101/article/details/70544197,这里只是改动了部分和部分填充并进一步说明:

首先更新apt包:

sudo apt-get update

安装SSH server:

sudo apt-get install openssh-server

配置SSH:

ssh localhost
exit 

输入密码登录本机和退出本机

如果需要无密码登录:

在进行了初次登陆后,会在当前家目录用户下有一个.ssh文件夹,进入该文件夹下:

cd ~/.ssh/ 

使用rsa算法生成秘钥和公钥对,:

ssh-keygen -t rsa

运行后一路回车就可以了,其中第一个是要输入秘钥和公钥对的保存位置,默认是在:

.ssh/id_rsa

生成完后就可以看到这一对的位置:

Your identification has been saved in /home/ykt/.ssh/id_rsa.
Your public key has been saved in /home/ykt/.ssh/id_rsa.pub.

然后把公钥加入到授权中:

cat ./id_rsa.pub >> ./authorized_keys 

再次ssh localhost的时候就可以无密码登陆了。

安装JDK:

首先检查是否已经安装

java -version

如果没有进行安装:看清位数

官网:Java Downloads | Oracle

这里选择的是:jdk-8u181-linux-x64.tar.gz

为了方便,为其单独创立一个文件夹:然后将其放到该目录下

sudo mkdir -p /usr/local/java
sudo mv /tmp/mozilla_ykt0/jdk-8u181-linux-x64.tar.gz  /usr/local/java/

下载后的具体位置以自己的为准,这里是/tmp/mozilla_ykt0/

进入该目录进行解压:

cd /usr/local/java
sudo tar xvzf jdk-8u131-Linux-x64.tar.gz

解压成功后会在当前目录下看到:

jdk1.8.0_181文件夹

然后删除安装包:

sudo rm jdk-8u181-linux-x64.tar.gz 

配置JDK:

设置环境变量:打开环境变量的配置文件

sudo vim /etc/profile

在末尾添加:

JAVA_HOME=/usr/local/java/jdk1.8.0_181
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH

注意:jdk1.8.0_181和下载的版本号对应

告诉Ubuntu  Java JDK的位置:


sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_181/bin/java" 1


sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_181/bin/javac" 1


sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_181/bin/javaws" 1

相应的将其设为默认方式:

sudo update-alternatives --set java  /usr/local/java/jdk1.8.0_181/bin/java

sudo update-alternatives --set javac  /usr/local/java/jdk1.8.0_181/bin/javac

sudo update-alternatives --set javaws  /usr/local/java/jdk1.8.0_181/bin/javaws

重新加载环境变量的配置文件:

source /etc/profile

检测:

java -version

出现一下即成功:

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

安装Hadoop:

要是去官网的话可以参考:

如何在Ubuntu 18.04上以独立模式安装Hadoop

可以去镜像:Index of /apache/hadoop/common

选择稳定版本;stable/,里面有两个文件,src是源码,需要编译,选择另一个下载即可,这是编译好的

这里选择的版本号是:hadoop-2.9.1

然后将其解压到:/usr/local

sudo tar -zxf ~/Downloads/hadoop-2.9.1.tar.gz -C /usr/local

记得删除安装包:

rm ~/Downloads/hadoop-2.9.1.tar.gz

重命名并修改权限:

cd /usr/local/

sudo mv ./hadoop-2.9.1/ ./hadoop
sudo chown -R ykt ./hadoop

授权前:

ls -al

drwxr-xr-x  9 root root 4096 4月  16 19:52 hadoop

授权后:

drwxr-xr-x  9 ykt  root 4096 4月  16 19:52 hadoop

检测:

 ./usr/local/hadoop/bin/hadoop version

出现以下安装成功:

Hadoop 2.9.1
Subversion https://github.com/apache/hadoop.git -r e30710aea4e6e55e69372929106cf119af06fd0e
Compiled by root on 2018-04-16T09:33Z
Compiled with protoc 2.5.0
From source with checksum 7d6d2b655115c6cc336d662cc2b919bd
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.9.1.jar

配置Hadoop:

(1)单机配置:

无需做任何东西,上面安装成功即是默认的单机模式:

测试:

cd /usr/local/hadoop

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar

可以看到Hadoop自身内置的很多例子:

An example program must be given as the first argument.
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
  bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.
  dbcount: An example job that count the pageview counts from a database.
  distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.
  grep: A map/reduce program that counts the matches of a regex in the input.
  join: A job that effects a join over sorted, equally partitioned datasets
  multifilewc: A job that counts words from several files.
  pentomino: A map/reduce tile laying program to find solutions to pentomino problems.
  pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.
  randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.
  randomwriter: A map/reduce program that writes 10GB of random data per node.
  secondarysort: An example defining a secondary sort to the reduce.
  sort: A map/reduce program that sorts the data written by the random writer.
  sudoku: A sudoku solver.
  teragen: Generate data for the terasort
  terasort: Run the terasort
  teravalidate: Checking results of terasort
  wordcount: A map/reduce program that counts the words in the input files.
  wordmean: A map/reduce program that counts the average length of the words in the input files.
  wordmedian: A map/reduce program that counts the median length of the words in the input files.
  wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.

这里直接采用https://blog.youkuaiyun.com/qjk19940101/article/details/70544197的例子

cd /usr/local/hadoop

cp ./etc/hadoop/*.xml ./input

cd input

ls


可以看到将以下xml作为输入:

capacity-scheduler.xml  core-site.xml  hadoop-policy.xml  hdfs-site.xml  httpfs-site.xml  kms-acls.xml  kms-site.xml  yarn-site.xml

运行:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep ./input/ ./out 'dfs[a-z.]+'

查看输出:

cat ./out/*

1    dfsadmin

可以看到在这些xml文件中符合dfs[a-z.]+正则表达式的单词只有一个即dfsadmin

注意:Hadoop默认不会覆盖结果文件,想要再次运行上面实例会提示出错,需要先将./out删除

rm -r ./out

试验完后可以将输入也删掉了

sudo rm -rf input

(2)伪分布式配置:

伪分布式需要修改2个配置文件core-site.xmlhdfs-site.xml,路径在:

/usr/local/hadoop/etc/hadoop,原博主这里貌似说错了。

打开core-site.xml

vim core-site.xml 

在:

<configuration>  
</configuration>

中添加如下配置

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>

说明:可以看到这里使用的是hdfs://localhost:9000即hdfs文件系统,例如还有淘宝的tfs://,谷歌的gfs://以及本地的file://

打开hdfs-site.xml

vim hdfs-site.xml

<configuration>  
</configuration>

添加:

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

这里的dfs.replication就是指备份的份数

配置说明:(这里粘贴一下原博主的话吧)
Hadoop的运行方式是由配置文件决定的(运行Hadoop时会读取配置文件),因此如果需要从伪分布模式切换到非分布式模式,需要删除core-site.xml中的配置项。
此外,伪分布式虽然只需要配置fs.defaultFS和dfs.replication就可以运行(官方教程如此),不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoop-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行format才行。所以进行了设置,同时也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会处错

切换回hadoop主目录:/usr/local/hadoop

NameNode的格式化

./bin/hdfs namenode -format

出现如下即成功:

00000000 using no compression
18/08/20 11:07:16 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 320 bytes saved in 0 seconds .
18/08/20 11:07:16 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/08/20 11:07:16 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ykt-virtual-machine/127.0.1.1
************************************************************/

开启NameNode和DataNode守护进程

./sbin/start-dfs.sh

注意:如果报错没有没有JAVA——HOME

则手动添加即可:(当前目录是usr/local/hadoop)

cd etc/hadoop/

vim hadoop-env.sh

# Set Hadoop-specific environment variables here.

# The only required environment variable is JAVA_HOME.  All others are
# optional.  When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.

# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_181

即可

验证:

jps

3648 DataNode
3941 Jps
2678 NameNode
3095 SecondaryNameNode

同时出现以上四个即成功

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

注意:

1)如果没有出现:SecondaryNameNode,重启,即运行sbin/stop-dfs.sh关闭进行,然后再次尝试启动尝试)

2)如果没有DataNode,这个情况的发生是由于虚拟机和linux共同作用的结果,虚拟机本身不稳电工。会虚拟机假死的情况,如果说页面已经出现了Datanode的话,那么重启一下,假死现象消失,jps后出现DataNode.

3)如果datanode确实没有启动,可以试着将/usr/local/hadoop/tmp/dfs下的data目录删除,然后重新启动dfs

rm -rf data

./sbin/start-dfs.sh

jps

笔者就是属于后者这种情况,因为在配置core-site.xmlhdfs-site.xml两个文件时,手动出错,所以多次修改,然后多次使用

./bin/hdfs namenode -format进行NameNode的格式化,但是这样的话每次都会为NameNode生成新的namespaceID,,但是在hadoop.tmp.dir目录下的DataNode还是保留上次的namespaceID,因为namespaceID的不一致,而导致DataNode无法启动,所以手动删除(删除/usr/local/hadoop/tmp/dfs目录下的data),重新生成datanode

所以格式化成功后,后续再也不要进行格式化了!!!!!!!!!!!!!!!

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

运行:

上面的单击模式,grep例子读取的是本地数据,伪分布式读取则是HDFS上的数据。

伪分布式和单机的mapreduce基本上都是一样的,最主要的区别就是该模式下要使用HDFS的文件系统。

所以首先需要在HDFS中创建用户目录:

./bin/hdfs dfs -mkdir -p /user/hadoop

然后创建输入文件夹:

./bin/hdfs dfs -mkdir /user/hadoop/input

类似单机模式,将etc/hadoop下所有的xml文件复制到输入

./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input

然后查看:

./bin/hdfs dfs -ls /user/hadoop/input

可以看到:

-rw-r--r--   1 ykt supergroup       7861 2018-08-20 13:15 /user/hadoop/input/capacity-scheduler.xml
-rw-r--r--   1 ykt supergroup       1028 2018-08-20 13:15 /user/hadoop/input/core-site.xml
-rw-r--r--   1 ykt supergroup      10206 2018-08-20 13:15 /user/hadoop/input/hadoop-policy.xml
-rw-r--r--   1 ykt supergroup       1069 2018-08-20 13:15 /user/hadoop/input/hdfs-site.xml
-rw-r--r--   1 ykt supergroup        620 2018-08-20 13:15 /user/hadoop/input/httpfs-site.xml
-rw-r--r--   1 ykt supergroup       3518 2018-08-20 13:15 /user/hadoop/input/kms-acls.xml
-rw-r--r--   1 ykt supergroup       5939 2018-08-20 13:15 /user/hadoop/input/kms-site.xml
-rw-r--r--   1 ykt supergroup        690 2018-08-20 13:15 /user/hadoop/input/yarn-site.xml

运行grep(该流程的mapreduce就和单机一样了,不一样的就是从hdfs文件系统取输入)

 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep /user/hadoop/input output 'dfs[a-z]+'

查看结果:

./bin/hdfs dfs -cat output/*

1    dfsadmin

可以看到和单机模式一样的结果

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

可以使用如下多种方式参看当前hdfs文件系统中的文件:

./bin/hadoop dfs -du -h
./bin/hadoop dfs -ls -h
./bin/hadoop fs -ls output

Found 2 items
-rw-r--r--   1 ykt supergroup          0 2018-08-20 13:27 output/_SUCCESS
-rw-r--r--   1 ykt supergroup         11 2018-08-20 13:27 output/part-r-00000

./bin/hadoop fs -cat output/part-r-00000

1    dfsadmin

利用HDFS Web界面,不过只能查看文件系统数据

http://localhost:50070

在utilities下的Browse the file system,可以查看当前的系统文件

当然还可以在datanodes下相关信息

用命令窗口查看hdfs系统时可以看到,这里既有hadoop 又有hdfs,这两者其实可以这么看,hdfs是hadoop的子集,hadoop不仅可以参看hdfs文件系统还可以查看例如淘宝的tfs://,谷歌的gfs://以及本地的file://等等。

所以一般还是用hadoop把,这个还是比较强大的。

用的格式一般为:

hadoop fs 命令 URL

这里的URL就是具体指要查看哪一个文件系统,如本地的的 file:///root 以及hdfs文件系统的 hdfs://localhost:9000/

这里的命令大部分和linux命令是相同或者类似的,下面列一些常见的(和linux常见一样的就不做介绍了):

-ls 可选参数有 -h (以单位的形式具体给出文件大小) -R(递归显示)

-cat 

-charp

-chmod

-chown

-cp

-mv

-tail 可选参数 -f (实时追踪)

-df  统计系统可用空间

-du 显示目录中所有文件大小

-mkdir 可选参数 -p (产生各级父目录)

-rm 

-rmr 递归删除

-put 上传文件到Hdfs

 所以这条命令一般后有URL1(上传的本地文件)  URL2(目的位置)    可选参数 -p (保留文件属性)  -f(如果已有       同名则覆盖)

-get 下载文件到本地,可选参数啥的和-put类似,只不过URL位置变一下

-appendToFile 追加文件 后面也有两个URL1 URL2 就是将URL1文件追加到URL2文件中

-getmerge 合并多个文件为一个文件

-setrep -w 5 URL 就是将URL文件副本改为5,还有一个可选参数就是-R就是递归修改文件

- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

关闭Hadoop:

./sbin/stop-dfs.sh

下次开启Hadoop:

./sbin/start-dfs.sh

从以上可以看出:每次操作hadoop时都得切换到目录/usr/local/hadoop/bin 或是/usr/local/hadoop/sbin下,所以还是给hadoop配置一下环境变量比较方便:

vim /etc/bash.bashrc 

在末尾添加:

export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

然后执行source命令:

source /etc/bash.bashrc

最后在任意位置试一下hadoop

hadoop version

Hadoop 2.9.1
Subversion https://github.com/apache/hadoop.git -r e30710aea4e6e55e69372929106cf119af06fd0e
Compiled by root on 2018-04-16T09:33Z
Compiled with protoc 2.5.0
From source with checksum 7d6d2b655115c6cc336d662cc2b919bd
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.9.1.jar

python有关于hadoop的框架,可以查看python 关于Hadoop的框架_爱吃火锅的博客-优快云博客

关于Hadoop更多介绍:Hadoop - 随笔分类 - LanceToBigData - 博客园

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值