oba*_*aid 5 google-api google-api-java-client google-hadoop
我正在尝试将我的Hadoop集群中的现有数据(JSON)迁移到Google云端存储.
我已经探索过GSUtil,它似乎是将大数据集移动到GCS的推荐选项.它似乎可以处理庞大的数据集.虽然GSUtil似乎只能将数据从本地机器移动到GCS或S3 < - > GCS,但是无法从本地Hadoop集群移动数据.
将数据从本地Hadoop集群移动到GCS的推荐方法是什么?
对于GSUtil,它可以直接将数据从本地Hadoop集群(HDFS)移动到GCS,还是首先需要在运行GSUtil的机器上复制文件然后转移到GCS?
使用Google客户端(Java API)库与GSUtil的优缺点是什么?
非常感谢,
Den*_*Huo 13
问题1:将数据从本地Hadoop集群移动到GCS的推荐方法是使用Google Cloud Storage连接器进行Hadoop.该网站上的说明主要用于在Google Compute Engine VM上运行Hadoop,但如果您使用的是Hadoop 1.x或Hadoop 0.20 ,您也可以直接下载GCS连接器gcs-connector-1.2.8-hadoop1.jar. .x或gcs-connector-1.2.8-hadoop2.jar用于Hadoop 2.x或Hadoop 0.23.x.
只需将jarfile复制到hadoop/lib目录或$HADOOP_COMMON_LIB_JARS_DIR
Hadoop 2的情况下:
cp ~/Downloads/gcs-connector-1.2.8-hadoop1.jar /your/hadoop/dir/lib/
Run Code Online (Sandbox Code Playgroud)
如果运行0.20.x,您可能还需要将以下内容添加到hadoop/conf/hadoop-env.sh文件中:
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/your/hadoop/dir/lib/gcs-connector-1.2.8-hadoop1.jar
Run Code Online (Sandbox Code Playgroud)
然后,您可能希望使用服务帐户"密钥文件"身份验证,因为您使用的是内部部署的Hadoop集群.访问您的cloud.google.com/console,APIs & auth
在左侧找到,单击Credentials
,如果您还没有单击Create new Client ID
,请Service account
在单击之前选择Create client id
,然后现在,连接器需要".p12"类型的密钥对,因此单击Generate new P12 key
并跟踪下载的.p12文件.在将其放置在更容易从Hadoop访问的目录中之前重命名它可能很方便,例如:
cp ~/Downloads/*.p12 /path/to/hadoop/conf/gcskey.p12
Run Code Online (Sandbox Code Playgroud)
将以下条目添加到Hadoop conf目录中的core-site.xml文件中:
<property>
<name>fs.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
</property>
<property>
<name>fs.gs.project.id</name>
<value>your-ascii-google-project-id</value>
</property>
<property>
<name>fs.gs.system.bucket</name>
<value>some-bucket-your-project-owns</value>
</property>
<property>
<name>fs.gs.working.dir</name>
<value>/</value>
</property>
<property>
<name>fs.gs.auth.service.account.enable</name>
<value>true</value>
</property>
<property>
<name>fs.gs.auth.service.account.email</name>
<value>your-service-account-email@developer.gserviceaccount.com</value>
</property>
<property>
<name>fs.gs.auth.service.account.keyfile</name>
<value>/path/to/hadoop/conf/gcskey.p12</value>
</property>
Run Code Online (Sandbox Code Playgroud)
通常不会使用fs.gs.system.bucket,除了在某些情况下对于mapred临时文件,您可能只想为此目的创建一个新的一次性存储桶.通过主节点上的这些设置,您应该已经能够进行测试hadoop fs -ls gs://the-bucket-you-want to-list
.此时,您已经可以尝试通过简单的方法将所有数据汇集到主节点之外hadoop fs -cp hdfs://yourhost:yourport/allyourdata gs://your-bucket
.
如果您想使用Hadoop的distcp加速它,请将lib/gcs-connector-1.2.8-hadoop1.jar和conf/core-site.xml同步到您的所有Hadoop节点,它应该按预期工作.请注意,无需重新启动数据节点或名称节点.
问题2:虽然Hadoop的GCS连接器能够直接从HDFS复制而无需额外的磁盘缓冲区,但GSUtil无法解释HDFS协议.它只知道如何处理实际的本地文件系统文件,或者如你所说,GCS/S3文件.
问题3:使用Java API的好处是灵活性; 您可以选择如何处理错误,重试,缓冲区大小等,但这需要更多的工作和计划.使用gsutil非常适合快速使用案例,并且您继承了Google团队的大量错误处理和测试.Hadoop的GCS连接器实际上是直接在Java API之上构建的,并且由于它都是开源的,因此您可以在GitHub上的源代码中看到使其顺利运行所需的各种事项:https:// github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/src/main/java/com/google/cloud/hadoop/gcsio/GoogleCloudStorageImpl.java
归档时间: |
|
查看次数: |
5945 次 |
最近记录: |