山河云对象存储为用户提供可无限扩展的通用数据存储服务,具有安全可靠、简单易用、高性能、低成本等特点。用户可将数据上传至 山河云对象存储中,以供数据分析。

由于 山河云对象存储兼容 AWS S3 API,因此 HDFS 可以通过 AWS S3 API 与 山河云对象存储高效集成,以满足更多的大数据计算和存储场景。

有关 QingStor 的更多内容,请参考 山河云对象存储用户指南

本小节以 test1 表为例,介绍如何使用 Phoenix 映射HBase 中已有的表。

操作步骤

  1. 在 HBase 客户端节点的 /root/.bashrc 文件最后,增加配置。

    可通过 Web 终端连接 VPN 登录 HBase 客户端,用户名为 ubuntu,密码为 hbase,通过 sudo su 可以切换到 root 用户。

    • HBase 1.2.6 - v1.1.0 版本,增加如下配置:

      export HADOOP_S3=/opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.7.3.jar,/opt/hadoop/share/hadoop/tools/lib/aws-java-sdk-1.7.4.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-annotations-2.2.3.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-core-2.2.3.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-core-asl-1.9.13.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-databind-2.2.3.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-jaxrs-1.9.13.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-mapper-asl-1.9.13.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-xc-1.9.13.jar
    • HBase 2.0.6 - v2.0.1 版本,增加如下配置:

      export HADOOP_S3=/opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.7.7.jar,/opt/hadoop/share/hadoop/tools/lib/aws-java-sdk-1.7.4.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-annotations-2.2.3.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-core-2.2.3.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-core-asl-1.9.13.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-databind-2.2.3.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-jaxrs-1.9.13.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-mapper-asl-1.9.13.jar,/opt/hadoop/share/hadoop/tools/lib/jackson-xc-1.9.13.jar
    • HBase 2.4.4 - v3.0.0 版本,增加如下配置:

      export HADOOP_S3=/opt/hadoop/share/hadoop/tools/lib/aws-java-sdk-bundle-1.11.375.jar,/opt/hadoop/share/hadoop/tools/lib/hadoop-aws-3.2.1.jar
      export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$(echo $HADOOP_S3 |sed 's/,/:/g')
  2. 执行以下命令,重启配置文件。

    source /root/.bashrc
  3. 在 HBase 客户端节点的 /opt/hadoop/etc/hadoop/core-site.xml 文件的 <configuration></configuration> 之间增加以下配置。

          <property>
              <name>fs.s3a.endpoint</name>
              <value>s3.${zone}.qingstor.com</value>
          </property>
          <property>
              <name>fs.s3a.access.key</name>
              <value>${access_key}</value>
          </property>
          <property>
              <name>fs.s3a.secret.key</name>
              <value>${secret_key}</value>
          </property>
          <property>
              <name>fs.s3a.connection.ssl.enabled</name>
              <value>false</value>
          </property>
          <property>
              <name>fs.s3a.paging.maximum</name>
              <value>1000</value>
          </property>
          <property>
              <name>fs.s3a.connection.timeout</name>
              <value>300000</value>
          </property>
          <property>
              <name>ipc.client.connect.timeout</name>
              <value>200000</value>
          </property>
          <property>
              <name>ipc.client.connect.max.retries.on.timeouts</name>
              <value>3</value>
          </property>
    参数 描述

    zone

    山河云对象存储可用区,目前开放了 jn1a,jn2a 区。

    access_key

    API 密钥 ID,即 API 密钥公钥。

    secret_key

    API 密钥私钥。

  4. 若 HBase 版本低于 2.4.4-v3.0.0,则需在 HBase 客户端节点的 /opt/hadoop/etc/hadoop/hadoop-env.sh 文件中替换目标信息,内容如下。

    替换前:

    export HADOOP_CLASSPATH=/usr/local/hadoop/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar:$HADOOP_CLASSPATH

    替换后:

    source /root/.bashrc
    export HADOOP_CLASSPATH=/usr/local/hadoop/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar:$HADOOP_CLASSPATH:$(echo $HADOOP_S3 |sed 's/,/:/g')

上传下载

完成以上述操作后,可进行本地文件、HDFS 文件与 山河云对象存储之间到上传和下载。

  • 本地文件和对象存储之间的上传下载

    cd /opt/hadoop
    # 从 HBase 客户端本地上传文件到 山河云对象存储
    bin/hdfs dfs -mkdir s3a://{{bucket_name}}/${dir}
    bin/hdfs dfs -put LICENSE.txt s3a://{{bucket_name}}/${dir}/
    
    # 将文件从 山河云对象存储下载到 Client 主机本地
    bin/hdfs dfs -get s3a://{{bucket_name}}/${dir}/LICENSE.txt
  • HDFS文件系统和对象存储之间的数据传输

    cd /opt/hadoop
    # 将文件从 山河云对象存储拷贝到 HDFS 文件系统
    bin/hadoop distcp -libjars $HADOOP_S3 s3a://{{bucket_name}}/${dir}/LICENSE.txt /LICENSE.txt
    
    # 将文件从 HDFS 文件系统拷贝到 山河云对象存储存储空间中
    bin/hadoop distcp -libjars $HADOOP_S3 /LICENSE.txt s3a://{{bucket_name}}/${dir}/