【问题标题】:Difficulties encountered in using s3a使用s3a遇到的困难
【发布时间】:2021-05-07 10:10:37
【问题描述】:

我是大数据开发的新手,遇到了一些问题,可能很简单,求大佬帮忙。 我想测试hadoop在本地通过s3a访问ceph的性能,我做了以下:

  1. 虚拟机安装3台Ubuntu18.04服务器并初始化网络和IP,安装 JDK18,并安装了hadoop3.2.2;

  2. 免密码登录设置,修改主机和配置昵称;

  3. 配置JDK和hadoop的环境变量,修改core-site.xml/hdfs- 在hadoop3.X/etc/hadoop/目录下的site.xml/mapred-site.xml/hadoop-env.sh。

  4. 配置粘贴如下:

        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/home/program/hadoop/data</value>
            <description>Abase for other temporary directories.</description>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop04:9000</value>
        </property>
        <property>
            <name>hadoop.http.staticuser.user</name>
            <value>root</value>
        </property>
        <property>
            <name>fs.s3a.access.key</name>
            <value>ak</value>
        </property>
        <property>
            <name>fs.s3a.secret.key</name>
            <value>sk</value>
        </property>
        <property>
            <name>fs.s3a.impl</name>
            <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
        </property>
        <property>
            <name>fs.s3a.endpoint</name>
            <value>https://172.17.37.60:8080</value>
        </property>
        <property>
            <name>fs.s3a.connection.ssl.enabled</name>
            <value>false</value>
        </property>
    
        hdfs-site.xml
        <configuration>
                <property>
                <name>dfs.replication</name>
                <value>3</value>
              </property>
                <property>
                <name>dfs.namenode.http-address</name>
                <value>hadoop04:9870</value>
              </property>
              <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/home/program/hadoop/data/dataname</value>
              </property>
              <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/home/program/hadoop/data/datanode</value>
              </property>
        </configuration>
    
        mapred-site.xml
        <configuration>
                <property>
                <name>mapred.job.tracker</name>
                <value>hadoop04:9001</value>
              </property>
        </configuration>
    
    
  5. 在不使用s3a的前提下,我在hadoop客户端调用hadoop是正常的,可以正常运行。为了使用s3a,来自网站hadoop,我添加了hadoop-client和 hadoop-aws 到 pom 依赖项。

  6. 我的探索是将hadoop-client-2.X.jar和hadoop-aws-2.X.jar放在服务器的hadoop-3.2.2/share/hadoop/client/目录下。重启hadoop,然后使用命令hadoop fs -ls s3a://endpoint:port,我得到了一个异常

        java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
            at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2638)
            at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3341)
            at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3373)
            at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:125)
            at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3424)
            at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3392)
            at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:485)
            at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365)
            at org.apache.hadoop.fs.shell.PathData.expandAsGlob(PathData.java:352)
            at org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:250)
            at org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:233)
            at org.apache.hadoop.fs.shell.FsCommand.processRawArguments(FsCommand.java:104)
            at org.apache.hadoop.fs.shell.Command.run(Command.java:177)
            at org.apache.hadoop.fs.FsShell.run(FsShell.java:327)
            at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
            at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
            at org.apache.hadoop.fs.FsShell.main(FsShell.java:390)
        Caused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
            at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2542)
            at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2636)
            ... 16 more```
    
    
  7. 我知道S3AFileSystem异常的原因是jar包放错了地方。还有其他问题吗?

【问题讨论】:

  • 我将从 S3A 文档开始,这里是故障排除页面hadoop.apache.org/docs/r3.3.0/hadoop-aws/tools/hadoop-aws/…
  • 是的,我知道这个jar包不见了,但是这个包应该放在哪里呢?我放在hadoop-home/share/hadoop/client下没有生效。
  • 1.您需要匹配的 aws sdk JAR。 2. 对象存储扩展有点奇怪。 env var 可以在本地添加它们,但这不会在集群中排列它们。最容易添加到与 hadoop-common.jar 相同的目录中

标签: hadoop hdfs ubuntu-18.04 ceph


【解决方案1】:

我在 hive 的 lib 目录中添加了下面的 JAR,它对我有用 (Hive 3.0)

hadoop-aws-3.2.1.jar
guava-27.0-jre.jar
aws-java-sdk-bundle-1.11.375.jar

您也可以将这些 jar 放到不同的位置并在 hive-env.sh 中添加路径

export HIVE_AUX_JARS_PATH=&lt;Path to all JAR files&gt;

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 2017-05-20
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多