hadoopdbhivehadoopソースコードを実行するときにカスタムcore-siteを正しく呼び出すことはできません.xmlなどのプロファイル

14323 ワード

はじめに


hadoopdbhivehadoopソースコードには、多くのテストマスターがありますが、これらのテストマスターは通常configuration、すなわち
新JobConf(conf)でconfigurationオブジェクトを初期化し、これらのプログラムを直接実行すると、
jarパッケージのプロファイルのみを読み込み、confパスで再定義された新しいプロファイルは読み込みません.

二ソリューション


プロジェクトのclasspathにconfファイルパスを追加するか、アプリケーションのclasspathにconfファイルパスを追加することを覚えておいてください.
configurationテストの例で説明します.
org.apache.hadoop.conf.configurationクラスは、テストに特化したmain関数を提供します.
1.run->debug configurationsで...ダイアログボックスの左側のバーにjavaアプリケーションが表示され、javaアプリケーションをダブルクリックすると、新しいデバッガの作成が求められます.
Nameをcongfiguration、メインプログラム選択org.apache.hadoop.conf.configuration,debugをクリック
次のデフォルト情報が出力されます.
<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
<property><name>hadoop.logfile.count</name><value>10</value></property>
<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
<property><name>ipc.client.kill.max</name><value>10</value></property>
<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
<property><name>fs.s3.block.size</name><value>67108864</value></property>
<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
<property><name>io.file.buffer.size</name><value>4096</value></property>
<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
<property><name>fs.trash.interval</name><value>0</value></property>
<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
<property><name>fs.checkpoint.size</name><value>67108864</value></property>
<property><name>fs.checkpoint.period</name><value>3600</value></property>
<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
<property><name>hadoop.native.lib</name><value>true</value></property>
<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
<property><name>fs.s3.maxRetries</name><value>4</value></property>
<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
<property><name>hadoop.logfile.size</name><value>10000000</value></property>
<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
<property><name>topology.script.number.args</name><value>100</value></property>
<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
<property><name>io.bytes.per.checksum</name><value>512</value></property>
<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
<property><name>local.cache.size</name><value>10737418240</value></property>
<property><name>hadoop.security.authorization</name><value>false</value></property>
<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
<property><name>io.skip.checksum.errors</name><value>false</value></property>
<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
<property><name>webinterface.private.actions</name><value>false</value></property>
<property><name>fs.default.name</name><value>file:///</value></property>
</configuration>
2.debug configurationsを開く...ダイアログを開き、configurationデバッガclasspathタブに$HADOOP_を追加します.HOME/confフォルダ.confファイルにカスタムプロファイルがある場合
カスタム構成がデフォルト構成を上書きしているのは、次の出力に表示されます.
<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
<property><name>hadoopdb.config.replication</name><value>false</value></property>
<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
<property><name>hadoop.logfile.count</name><value>10</value></property>
<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
<property><name>ipc.client.kill.max</name><value>10</value></property>
<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
<property><name>fs.s3.block.size</name><value>67108864</value></property>
<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
<property><name>io.file.buffer.size</name><value>4096</value></property>
<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
<property><name>fs.trash.interval</name><value>0</value></property>
<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
<property><name>fs.checkpoint.size</name><value>67108864</value></property>
<property><name>fs.checkpoint.period</name><value>3600</value></property>
<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
<property><name>hadoopdb.fetch.size</name><value>1000</value></property> # 
<property><name>hadoop.native.lib</name><value>true</value></property>
<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
<property><name>fs.s3.maxRetries</name><value>4</value></property>
<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
<property><name>hadoop.logfile.size</name><value>10000000</value></property>
<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
<property><name>topology.script.number.args</name><value>100</value></property>  # 
<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
<property><name>hadoopdb.config.file</name><value>HadoopDB.xml</value></property>   # 
<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
<property><name>io.bytes.per.checksum</name><value>512</value></property>
<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
<property><name>local.cache.size</name><value>10737418240</value></property>
<property><name>hadoop.security.authorization</name><value>false</value></property>
<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
<property><name>io.skip.checksum.errors</name><value>false</value></property>
<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
<property><name>webinterface.private.actions</name><value>false</value></property>
<property><name>fs.default.name</name><value>hdfs://localhost:9000</value></property> # 
</configuration>

三まとめ


この場合configurationクラス内部では,リソースの読み出しに以下の方式が採用されるためである.
    ClassLoader cL = Thread.currentThread().getContextClassLoader();     if (cL == null) {       cL = Configuration.class.getClassLoader();     }
次にcL.getResource(「XXX.xml」)を使用して、クラスが存在するパスのルートディレクトリに格納されているリソースを取得します.
のように
|-com.cn.test                   |-Test.class                   |-test2.txt  |-test1.txt
com.cn.test.class.getClassLoader.getResource(「test 1.txt」)はtest 1を返す.txt
com.cn.test.class.getClassLoader.getResource(「test 2.txt」)はnullを返します
この場合、他のリソースを追加する場合はclasspathに他のパスを追加できます.