伪分布式Hadoop下对HDFS的操作常见问题

伪分布式Hadoop下对HDFS的操作常见问题

先行条件:

已经配置好了 伪分布式Hadoop ,并且可以 正常启动 伪分布式集群。

若没有的话,按如下步骤操作:

  1. 首先到以下镜像网站下载需要的Hadoop版本(无论哪个版本,下载 最大 的那个压缩包):https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/

  2. 然后使用tar命令解压到目标文件夹下:

    # 下面是解压到了主目录下 /home/username
    tar -zxf hadoop-2.10.1.tar.gz -C ~
    
  3. 解压之后进行伪分布式的配置,需要修改三个文件内容: hadoop-env.sh、hdfs-site.xml、core-site.xml

    <!-- 将以下内容修改到 hdfs-site/xml -->
    <property>
    	<name>dfs.replication</name>
    	<value>1</value>
    </property>
    <property>
    	<name>dfs.namenode.name.dir</name>
    	<value>file:/home/wangli/hadoop-2.10.1/nodes/dfs/name</value>
    </property>
    <property>
    	<name>dfs.datanode.data.dir</name>
    	<value>file:/home/wangli/hadoop-2.10.1/nodes/dfs/data</value>
    </property>
    
    <!-- 将下列内容修改到 core-site.xml -->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>file:/home/username/hadoop-2.10.1/nodes</value>
    	<description>Abase for other temporary directories.</description>
    </property>
    <property>
    	<name>fs.defaultFS</name>
    	<value>hdfs://localhost:9000</value>
    </property>
    
    # 在 hadoop-env.sh 中指明JAVA_HOME
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    
  4. Namenode 进行格式化

    > hadoop namenode -format
    # 中途如果出现要输入 就按要求输入大写Y 没有就不用管了
    
  5. 之后就可以启动伪分布式的 HDFS 集群了

    cd ~/hadoop-2.10.1
    ./sbin/start-dfs.sh
    # 等待一会儿后输入jps 查看是否有以下三个节点
    >namenode
    >secondarynamenode
    >datanode
    
  6. 启动HDFS集群的过程中如果报以下错误:

    • 如果只是 Permission denied 报错的话,只需要配置ssh免密登录就好了,如下:

      这个操作在我的另一篇文章中的第二个问题有步骤 点我跳转

    • localhost: rcmd: socket: Permission denied

      解决方案:

      # 首先要执行上面配置ssh的操作
      sudo vim /etc/pdsh/rcmd_default
      # 在打开或者新建的文件中输入
      ssh
      # 保存退出
      

在终端中使用HDFS命令常见问题:

  1. 对HDFS进行操作的时候首先要保证HDFS集群启动:

    # 输入jps查看是否启动了hdfs集群,如果没有的话执行以下命令
    cd ~/hadoop-2.10.1
    ./sbin/start-dfs.sh
    # 再次输入jps查看各个节点是否全部启动
    
    # 如果出现缺失namenode或者datanode的情况,需要对hadoop伪分布式设置进行查看
    # 查看节点对应的路径中是否包含tmp或者temp,并且修改为其他任意名称的文件夹
    # (linux会自动清理缓存文件夹中的文件),之后删除原路径下的数据,重新格式化namenode
    hadoop namenode -format
    
  2. 在hadoop目录下使用如下命令:

    # put命令:上传本地文件到hdfs
    ./bin/hdfs dfs -put ~/test/test.txt /usr/test
    # get命令:从hdfs中下载文件到本地
    ./bin/hdfs dfs -get /usr/test/test.txt ~/桌面
    

    上述两个操作需要注意的是:put命令上传 本地文件 ( 文件必须已经存在 )需要明确 指明 本地文件的 路径 ,上传到hdfs的路径也必须已经存在;get命令下载hdfs中的文件到本地也需要 指明路径

在IDE中编写Java代码进行操作常见问题(以Eclipse为例):

  1. 首先要下载Eclipse,可以去 官网 下载最新版或者使用之前版本(有的机器上安装比较慢,可以下载绿色解压版本,直接解压使用)。如果下载最新版本的Eclipse, 一定!一定!一定!一定!一定!一定! 要把 Java compiler 的版本设置成和 本机jdk相同 的版本,如下:(笔者的jdk是1.8的)

  2. 新版本的Eclipse创建 Java Project 的时候,使用本机安装了的jre,以及不要勾选一个选项:

  3. 要多HDFS进行操作需要在项目中添加依赖的jar包, 导入的jar包要在classpath下,不能再modulepath下,否则导包语句就报错

    需要导入的jar包有:

    • ~/hadoop-2.10.1/share/hadoop下common文件夹中的:hadoop-common-2.10.1.jar、hadoop-nfs-2.10.1.jar 以及lib目录下的所有jar包
    • ~/hadoop-2.10.1/share/hadoop下hdfs文件夹中的:hadoop-hdfs-2.10.1.jar、 hadoop-hdfs-client-2.10.1.jar 、hadoop-hdfs-nfs-2.10.1.jar以及lib目录下的所有jar包。

    特别注意的是 hadoop-hdfs-client-2.10.1.jar 包一定要导入,否则可能导致的结果:

    • 报:No FileSystem for scheme “hdfs” 错
    • 报:Class org.apache.hadoop.hdfs.DistributedFileSystem not found
  4. 使用Eclipse打包成jar包之后,使用如下命令在终端中执行打包好的jar包:

    cd ~/hadoop-2.10.1
    # 下面的 ~/test.jar 是打包成jar包的输出位置
    ./bin/hadoop jar ~/test.jar
    

    若出现 java.lang.UnsupportedClassVersionError ,则证明ide用更高版本的编译器进行了编译,需要在properties设置Java编译器版本和自己的jdk版本相同。执行第一步。

  5. 在Eclipse里面执行程序在HDFS上进行操作的时候如果报错:

    • java.net.ConnectException:拒绝连接

    原因是HDFS集群尚未启动或者没有配置ssh免密登录导致HDFS集群启动异常。

    配置ssh和启动HDFS集群在上面有介绍。重新启动后执行就可以了。

关于HDFS的Web管理界面:

  • 查看HDFS的Web管理界面,首先要确保HDFS集群正常启动。
  • HDFS启动之后打开浏览器,如果自己没有对端口号进行更改,打开浏览器,输入以下url:
    • Hadoop 2.x: localhost:50070
    • Hadoop 3.x: localhost:9870
  • 根据自己的hadoop版本输入后就可以进入到Web管理界面了

# 关于上一篇 伪分布式HBASE文章 常见问题的补充:

  • 如果进入hbase shell中,执行任意语句报错:

    • master initialzing
    • Nonode /hbase/master
      • 与上篇文章中相同报错不同的是 --> 这个问题是启动伪分布式hbase之后,HMaster进程自动消失
  • 解决方案:

    cd ~/hadoop-2.10.1
    ./sbin/start-dfs.sh
    # 执行下面的命令删除之前hbase的相关内容,然后重新启动hbase
    # 下面的/hbase是在文件hbase-site.xml中指明的hbase根目录,存放在hdfs中
    # hbase-site.xml 文件在 ~/hbase-2.3.7/conf下 根据自己的hbase目录找
    ./bin/hdfs dfs -rm -r -f /hbase
    cd ~/hbase-2.3.7
    ./bin/start-hbase.sh
    # 然后查看是否成功启动了hbase,如果成功,就可以到hbase shell界面进行正常操作了
    

其他问题可以在评论里提出。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值