このトピックでは、Tunnel コマンドに関するよくある質問(FAQ)への回答を提供します。
Tunnel Upload のワイルドカードおよび正規表現のサポート
Tunnel Upload コマンドは、ワイルドカードや正規表現をサポートしていません。
Tunnel Upload の制限事項と圧縮
Tunnel Upload のファイルサイズに制限はありませんが、1 回の操作は 2 時間に制限されています。アップロード速度に基づいて、アップロード可能な最大データ量を推定してください。
1 つのレコードの最大サイズは 200 MB です。
Tunnel Upload はデフォルトで圧縮を使用します。帯域幅に余裕がある場合は、-cp パラメーターを使用して圧縮を無効にできます。
テーブルまたはパーティションへの並列アップロード
はい、並列でデータをアップロードできます。
複数クライアントからの同時アップロード
はい。
事前作成済みパーティションの要否
Tunnel Upload コマンドで -acp パラメーターを使用すると、送信先パーティションを自動的に作成できます。このパラメーターのデフォルト値は false です。詳細については、「Tunnel コマンド」をご参照ください。
非パーティション化テーブルへのアップロード
はい。Tunnel Upload コマンドの構文では、[/partition] パラメーターは省略可能です。非パーティション化テーブルにデータをアップロードする場合は、パーティション情報を指定する必要はありません。次のコマンドを使用できます。
tunnel upload <path> <table_name>;
パーティションテーブルの場合は、パーティション情報を指定する必要があります。指定しないとエラーが発生します。Tunnel コマンドのパラメーターと使用方法の詳細については、「Tunnel コマンド」をご参照ください。
圧縮データの課金基準
課金は、圧縮後のデータサイズに基づいて行われます。
Tunnel Upload はレート制限をサポートしていますか?
いいえ、レート制限はサポートされていません。
Tunnel アップロードが遅い場合の対処方法
データアップロードが遅すぎる場合は、-threads パラメーターを使用してデータをスライスに分割してアップロードすることを検討してください。たとえば、ファイルを 10 スライスに分割します。例として次のコマンドを示します。
tunnel upload C:\userlog.txt userlog1 -threads 10 -s false -fd "\u0000" -rd "\n";
パブリックエンドポイントとクラシックネットワークエンドポイント
MaxCompute クライアントの odps_config.ini 設定ファイルでは、標準エンドポイントに加えて Tunnel エンドポイントも設定する必要があります。必要なエンドポイント値については、「エンドポイント」をご参照ください。中国 (上海) リージョンでは Tunnel エンドポイントは不要です。
DataStudio での Tunnel Upload エラー
-
症状
DataStudio で Tunnel Upload コマンドを実行してパーティションにデータをアップロードすると、次のエラーが返されます。
FAILED: error occurred while running tunnel command. -
原因
DataStudio は Tunnel Upload コマンドをサポートしていません。
-
解決策
DataWorks のビジュアルデータインポート機能を使用してください。詳細については、「データのアップロード」をご参照ください。
キャリッジリターンまたはスペースを含むデータの処理
データに改行文字またはスペースが含まれている場合は、カスタムデリミタを設定し、-rd および -fd を使用してこのデリミタを指定してデータをアップロードできます。データ内のデリミタを変更できない場合は、データを 1 行としてアップロードしてから UDF を使用して解析します。
次のサンプルデータにはキャリッジリターンが含まれており、列区切り文字として , (-rd)、行区切り文字として @ (-fd) を使用することで正常にアップロードできます。
shopx,x_id,100@
shopy,y_id,200@
shopz,z_id,300@
次のコマンドは、アップロードコマンドの例です。
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false -fd "," -rd "@";
次のコードは、アップロード結果の例です。
+-----------+-------------+-------------+-----------+--------+
| shop_name | customer_id | total_price | sale_date | region |
+-----------+-------------+-------------+-----------+--------+
| shopx | x_id | 100.0 | 201312 | hangzhou |
| shopy | y_id | 200.0 | 201312 | hangzhou |
| shopz | z_id | 300.0 | 201312 | hangzhou |
+-----------+-------------+-------------+-----------+--------+
メモリオーバーフローのエラー解消
Tunnel Upload コマンドは大量のデータを処理するように設計されています。メモリオーバーフローのエラーは通常、行および列のデリミタが誤って設定されていることを示します。これにより、テキストファイル全体が 1 つのレコードとして扱われ、メモリにキャッシュされ、オーバーフローが発生します。
このような場合は、まず少量のデータでテストを行います。-td および -fd のデバッグが成功したら、全データセットをアップロードできます。
フォルダからのスクリプトによるアップロード
Tunnel Upload コマンドは、単一ファイルまたはディレクトリ(第 1 階層のみ)のアップロードをサポートしています。詳細については、「Tunnel 使用ガイド」をご参照ください。
たとえば、次のコマンドを実行して d:\data フォルダ内のすべてのデータをアップロードできます。
tunnel upload d:\data sale_detail/sale_date=201312,region=hangzhou -s false;
複数ファイルの異なるパーティションへのバッチアップロード
Shell スクリプトを使用できます。次の例は、Windows 環境で MaxCompute クライアントと共に使用する Shell スクリプトです。Linux でも同じ原則が適用されます。Shell スクリプトの内容は次のとおりです。
#!/bin/sh
# まず、dt をパーティションキーとするパーティションテーブル user を作成します。この例では、MaxCompute クライアントが C:/odpscmd_public/bin/odpscmd.bat にインストールされています。環境に応じてパスを調整してください。
C:/odpscmd_public/bin/odpscmd.bat -e "create table user(data string) partitioned by (dt int);"
dir=$(ls C:/userlog) # 変数 dir を定義して、ソースフォルダ内のすべてのファイル名を格納します。
pt=0 # 変数 pt はパーティション値として使用され、0 で開始します。各ファイルのアップロード後に 1 ずつ増加します。これにより、各ファイルが異なるパーティションに格納されます。
for i in $dir # C:/userlog フォルダ内のすべてのファイルをループ処理します。
do
let pt=pt+1 # 各ループの終了時に pt 変数を 1 増加させます。
echo $i # ファイル名を表示します。
echo $pt # パーティション名を表示します。
# odpscmd を使用して、まずパーティションを追加し、その後ファイルをそのパーティションにアップロードします。
C:/odpscmd_public/bin/odpscmd.bat -e "alter table user add partition (dt=$pt);tunnel upload C:/userlog/$i user/dt=$pt -s false -fd "%" -rd "@";"
done
次の例は、userlog1 および userlog2 の 2 つのファイルで Shell スクリプトを実行した際の出力です。
C:\Program Files\Git>sh new2.sh
ID = 2018093010184361gmgpe62m
OK
userlog1.txt
1
ID = 2018093010184717ghpnz192
OK
Upload session: 20180930181848c2dbdb0b1e78e146
Start upload:C:\userlog\userlog1.txt
Using @ to split records
Upload in strict schema mode: true
Total bytes:31 Split input to 1 blocks
2018-09-30 18:18:40 upload block: '1'
2018-09-30 18:18:41 upload block complete, blockid=1
OK
userlog2.txt
2
ID = 20180930101852483gux1r292
OK
Upload session: 20180930181853c3dcdb0b1f57b5c4
Start upload:C:\userlog\userlog2.txt
Using @ to split records
Upload in strict schema mode: true
Total bytes:34 Split input to 1 blocks
2018-09-30 18:18:46 upload block: '1'
2018-09-30 18:18:46 upload block complete, blockid=1
OK
アップロード完了後、MaxCompute クライアントでテーブルデータをクエリできます。次の例は、クエリ結果を示しています。
odps@ MaxCompute_DOC>select * from user where dt < 100;
ID = 20180930102040044gnn5f392
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun.com/api&p=MaxCompute_DOC&i=20180930102040044gnn5f392&token=NzRrNDAxaGx2RDRsU2QwN08zTGdJSUp4ZEdJPSxPRFBTX09CTzoxMDc5OTI2ODk2OTk5NDIxLDE1Mzg5MDc2NDAseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL01heENvbXB1dGVfRE9DL2luc3RhbmNlcy8yMDE4MDkzMDEwMjA0MDA0NGdubjVmMzkyIl19XSwiVmVyc2lvbiI6IjEifQ==
Job Queueing...
+------------+------------+
| data | dt |
+------------+------------+
| we123#asd | 1 |
| we1234#asd | 1 |
| we1235#asd | 1 |
| waa123#asd | 2 |
| waa1234#asd | 2 |
| waa1235#asd | 2 |
+------------+------------+
6 records (at most 10000 supported) fetched by instance tunnel.
アップロード時のダーティデータのスキップ
Tunnel Upload コマンドで -dbr true パラメーターを使用すると、列が多すぎる行、列が不足している行、列のデータ型が一致しない行など、ダーティデータを無視できます。-dbr パラメーターのデフォルト値は False であり、ダーティデータは無視されません。値を True に設定すると、テーブル定義に準拠していないすべてのデータが無視されます。詳細については、「アップロード」をご参照ください。
ステータス競合エラーの解消
-
症状
Tunnel Upload コマンドを使用すると、次のエラーが返されます。
java.io.IOException: RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. at com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93) at com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:92) at com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:45) at com.xeshop.task.SaleStatFeedTask.doWork(SaleStatFeedTask.java:119) at com.xgoods.main.AbstractTool.excute(AbstractTool.java:90) at com.xeshop.task.SaleStatFeedTask.main(SaleStatFeedTask.java:305)java.io.IOException: RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. -
原因
ファイルはすでにアップロード中であり、操作を重複させることはできません。
-
解決策
アップロード操作を繰り返さないでください。既存のアップロードタスクが完了するまでお待ちください。
リクエストボディエラーの解消
-
症状
Tunnel Upload コマンドを使用すると、次のエラーが返されます。
java.io.IOException: Error writing request body to server -
原因
この例外は、データがサーバーに書き込まれている際に発生します。通常、アップロードプロセス中にネットワーク接続が切断されたか、タイムアウトしたことが原因です。具体的な原因は次のとおりです。
-
データソースがローカルファイルではなく、データベースなどのソースから取得されている場合、データ取得を待っている間に書き込みプロセスがタイムアウトすることがあります。600 秒間データがアップロードされないと、操作はタイムアウトします。
-
パブリックエンドポイントを使用してパブリックネットワーク経由でデータをアップロードする場合、ネットワーク接続が不安定であるためにアップロードがタイムアウトすることがあります。
-
-
解決策
-
アップロードプロセス中は、まずデータをフェッチしてから、Tunnel SDK を呼び出してデータをアップロードします。
-
1 つのブロックでアップロードできるデータ量は 64 MB ~ 100 GB です。リトライによるタイムアウトを回避するために、ブロックあたりのレコード数を 10,000 未満に保つことを推奨します。1 つのセッションには最大 20,000 ブロックまで含まれます。データが ECS インスタンス上にある場合は、「エンドポイント」でエンドポイント情報をご確認ください。
-
パーティションが存在しないエラーの解消
-
症状
Tunnel を使用してデータをアップロードすると、次のエラーが返されます。
ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist -
原因
データ挿入の送信先パーティションが存在しません。
-
解決策
まず
show partitions table_name;コマンドを実行してパーティションが存在するかどうかを確認し、その後alter table table_name add [if not exists] partition partition_specを実行して対応するパーティションを作成します。
列不一致エラーの解消
これは通常、データソースファイルの行区切り文字が誤っているため、複数のレコードが 1 つのレコードとして扱われることが原因です。-rd パラメーターをリセットする必要があります。
マルチスレッドでの ODPS-0110061 エラーの解消
-
症状
複数のスレッドを使用してデータをアップロードすると、次のエラーが返されます。
FAILED: ODPS-0110061: Failed to run ddltask - Modify DDL meta encounter exception : ODPS-0010000:System internal error - OTS transaction exception - Start of transaction failed. Reached maximum retry times because of OTSStorageTxnLockKeyFail(Inner exception: Transaction timeout because cannot acquire exclusive lock.) -
原因
このエラーは、同じテーブルに対する頻繁な同時書き込み操作によって発生します。
-
解決策
同時スレッド数を減らし、リクエスト間に遅延を追加し、失敗した操作に対してリトライメカニズムを実装してください。
CSV アップロード時のヘッダーのスキップ
Tunnel Upload コマンドに -h true パラメーターを追加すると、最初のヘッダー行をスキップできます。
CSV インポート後のデータ欠落
この問題は通常、データエンコーディングが正しくないか、デリミタが誤っているためにデータが正しくアップロードされないことが原因です。アップロード操作を実行する前に、生データを適切にフォーマットすることを推奨します。
Shell スクリプトによる TXT ファイルのアップロード
システムのコマンドラインウィンドウで次のコマンドを実行すると、必要なパラメーターを指定して MaxCompute テーブルに迅速にデータをアップロードできます。
...\odpscmd\bin>odpscmd -e "tunnel upload "$FILE" project.table"
コマンドラインツールの実行方法の詳細については、「odpscmd クライアントを使用した接続」をご参照ください。
フォルダインポート時のフィールド不一致の解消
Tunnel Upload コマンドに -dbr=false -s true パラメーターを追加して、データ形式を検証します。
column mismatch エラーは通常、列数の不一致が原因で発生します。たとえば、列区切り文字が誤って設定されている場合や、ファイルの末尾に空行がある場合に、デリミタで分割すると列数が不一致になります。
2 つ目のファイルアップロード時のサイレント失敗
MaxCompute クライアントでアップロードに --scan パラメーターを使用すると、再開可能モードでのパラメーター渡しに問題が発生します。--scan=true パラメーターを削除して、操作を再試行してください。
アップロード失敗後の再試行時のブロックスキップ
各ブロックは HTTP リクエストに対応しており、複数ブロックのアップロードは同時かつアトミックに行われます。ブロックの同期リクエストは、成功するか失敗するかのいずれかであり、他のブロックに影響を与えません。
リトライ回数には上限があります。リトライ上限に達すると、アップロードは次のブロックに進みます。アップロード完了後は、select count(*) from table; 文を使用してデータ損失を確認できます。
遅いアップロード速度の改善
Tunnel Upload コマンド自体に速度制限はありません。アップロード速度のボトルネックは通常、ネットワーク帯域幅、クライアントのパフォーマンス、サーバーのパフォーマンスに関連しています。パフォーマンスを向上させるには、データをパーティション化するか、複数のテーブルを使用するか、複数の ECS インスタンスからデータをアップロードできます。
大規模アップロード時のセッショータイムアウト防止
ソースデータを複数の小さなタスクに分割することを推奨します。
セッション数過多によるアップロード遅延
ブロックサイズを適切な値に設定してください。最大ブロック ID は 20,000 です。ビジネス要件に基づいてセッション期間を設定してください。データはセッションがコミットされた後でのみ表示されます。セッションを頻繁に作成しないでください。5 分間に最大 1 つのセッションしか作成できません。64 MB 以上の大きなブロックサイズを使用してください。
最終列の余分な \r 文字
改行文字は Windows では \r\n、macOS および Linux では \n です。Tunnel コマンドは、システムの改行文字をデフォルトの列区切り文字として使用します。そのため、Windows で編集されたファイルを macOS または Linux システムからアップロードすると、\r 文字がデータとしてテーブルにインポートされます。
デフォルトデリミタ使用時のデータ内カンマの処理
データの説明フィールドにカンマが含まれている場合は、データデリミタを別の文字に変更し、アップロード時に -fd パラメーターを使用して新しいデリミタを指定できます。
スペースデリミタまたは正規表現フィルターの処理
Tunnel Upload コマンドは正規表現をサポートしていません。データがスペースをデリミタとして使用している場合や、正規表現フィルターが必要な場合は、MaxCompute UDF を使用できます。
生データがスペースを列区切り文字として使用し、キャリッジリターンを行区切り文字として使用していると仮定します(次の例を参照)。引用符で囲まれたデータを抽出し、「-」などの特定の文字をフィルターで除外する必要があります。このような複雑な要件は、正規表現を使用して処理できます。
10.21.17.2 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73477.html" 200 0 81615 81615 "-" "iphone" - HIT - - 0_0_0 001 - - - -
10.17.5.23 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73478.html" 206 0 49369 49369 "-" "huawei" - HIT - - 0_0_0 002 - - - -
10.24.7.16 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73479.html" 206 0 83821 83821 "-" "vivo" - HIT - - 0_0_0 003 - - - -
次の手順を実行します。
-
データを単一列としてアップロードします。まず、MaxCompute プロジェクト内にデータを受信するための単一列テーブルを作成します。次のコマンドが例です。
create table userlog1(data string); -
存在しない列区切り文字(例:
\u0000)を使用して、データを列に分割せずにアップロードします。次のコマンドが例です。tunnel upload C:\userlog.txt userlog1 -s false -fd "\u0000" -rd "\n"; -
生データのアップロード後、MaxCompute Studio で Python UDF を記述および登録します。Java UDF を使用することもできます。UDF の記述および登録方法の詳細については、「Java UDF の開発」または「Python UDF の開発」をご参照ください。
次のコードは UDF の例です。登録された関数名が ParseAccessLog であると仮定します。
from odps.udf import annotate from odps.udf import BaseUDTF import re # 正規表現モジュールをインポートします。 regex = '([(\d\.)]+) \[(.*?)\] - "(.*?)" (\d+) (\d+) (\d+) (\d+) "-" "(.*?)" - (.*?) - - (.*?) (.*?) - - - -' # 使用する正規表現。 # line -> ip,date,request,code,c1,c2,c3,ua,q1,q2,q3 @annotate('string -> string,string,string,string,string,string,string,string,string,string,string') # 文字列の数が実際のデータ列数と一致していることを確認してください。この例では 11 列です。 class ParseAccessLog(BaseUDTF): def process(self, line): try: t = re.match(regex, line).groups() self.forward(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10]) except: pass -
関数を登録後、userlog1 テーブルの生データを処理するために UDF を使用できます。この例では列名が data であることを確認してください。標準 SQL 構文を使用して、処理済みデータを格納する userlog2 という名前のテーブルを作成できます。次のコマンドが例です。
create table userlog2 as select ParseAccessLog(data) as (ip,date,request,code,c1,c2,c3,ua,q1,q2,q3) from userlog1;処理完了後、userlog2 テーブルをクエリできます。データは正しく列に分割されています。
select * from userlog2; -- 次の結果が返されます。 +----+------+---------+------+----+----+----+----+----+----+----+ | ip | date | request | code | c1 | c2 | c3 | ua | q1 | q2 | q3 | +----+------+---------+------+----+----+----+----+----+----+----+ | 10.21.17.2 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73477.html | 200 | 0 | 81615 | 81615 | iphone | HIT | 0_0_0 | 001 | | 10.17.5.23 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73478.html | 206 | 0 | 4936 | 4936 | huawei | HIT | 0_0_0 | 002 | | 10.24.7.16 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73479.html | 206 | 0 | 83821 | 83821 | vivo | HIT | 0_0_0 | 003 | +----+------+---------+------+----+----+----+----+----+----+----+
アップロード後のダーティデータの処理
1 回の操作で非パーティション化テーブルまたは単一パーティションにデータを書き込むことを推奨します。同じパーティションに複数回書き込むと、ダーティデータが生成される可能性があります。MaxCompute クライアントで tunnel show bad <sessionid>; コマンドを実行して、ダーティデータを確認できます。ダーティデータが生成された場合は、次の方法で削除できます。
-
drop table ...;コマンドを実行してテーブル全体を削除するか、alter table ... drop partition;コマンドを実行して対象パーティションを削除し、その後データを再アップロードします。 -
WHERE 句を使用してダーティデータをフィルターできる場合は、WHERE 句付きの INSERT 文を使用して正しいデータを新しいテーブルにインポートするか、インプレース更新を実行します。ソースと送信先のパーティション/テーブル名は同じです。
ジオメトリデータの同期
MaxCompute はジオメトリデータ型をサポートしていません。ジオメトリデータを MaxCompute に同期する前に、STRING 型に変換する必要があります。
ジオメトリ型は特殊なデータ型であり、標準 SQL データ型の一部ではありません。汎用的な JDBC フレームワークはジオメトリ型をサポートしていません。これにより、データのインポートおよびエクスポートには特別な処理が必要です。
Tunnel Download のサポートされるエクスポート形式
Tunnel Download コマンドを使用してエクスポートされるデータファイルは、TXT 形式または CSV 形式にすることができます。
同一リージョン内での Tunnel ダウンロードの課金
同一リージョン内でパブリックネットワークトラフィックの課金を回避してデータをダウンロードするには、クラシックネットワークまたは VPC 用の Tunnel エンドポイントを設定する必要があります。設定しない場合、データが別のリージョンのパブリックネットワークエンドポイント経由でルーティングされ、課金が発生する可能性があります。
繰り返し発生するダウンロードタイムアウトの解消
このエラーは通常、Tunnel エンドポイントが正しくないことを示します。Tunnel エンドポイントが正しく設定されているかどうかを確認してください。エンドポイントを簡単に検証するには、Telnet などのツールを使用してネットワーク接続をテストします。
権限なしエラーの解消
-
症状
Tunnel Download コマンドを使用すると、次のエラーが返されます。
You have NO privilege ‘odps:Select‘ on {acs:odps:*:projects/XXX/tables/XXX}. project ‘XXX‘ is protected. -
原因
プロジェクトに対してデータ保護機能が有効になっています。
-
解決策
あるプロジェクトから別のプロジェクトにデータをエクスポートする場合は、プロジェクトオーナーが操作を実行する必要があります。
データサブセットのダウンロード
Tunnel はデータの計算またはフィルタリングをサポートしていません。特定のサブセットのデータをダウンロードするには、次のいずれかの方法を使用します。
-
SQL タスクを実行して、ダウンロードしたいデータを一時テーブルに保存します。ダウンロード完了後、一時テーブルを削除します。
-
必要なデータ量が少ない場合は、ダウンロードせずに SQL コマンドを使用してデータを直接クエリできます。
Tunnel 履歴の保持期間
保持期間は時間ベースではありません。デフォルトでは、最新の 500 件のエントリが保存されます。
Tunnel アップロードワークフロー
Tunnel を使用したデータアップロードワークフローは次のとおりです。
-
ソースデータ(ソースファイルまたはデータテーブルなど)を準備します。
-
テーブルスキーマおよびパーティション定義を設計し、データ型変換を実行してから、MaxCompute にテーブルを作成します。
-
MaxCompute テーブルにパーティションを追加します。テーブルがパーティション化されていない場合は、この手順をスキップできます。
-
データを指定されたパーティションまたはテーブルにアップロードします。
パス内の中国語文字のサポート
はい、中国語文字はサポートされています。
デリミタ使用時の注意事項
Tunnel でデリミタを使用する際は、次の点に注意してください。
-
行区切り文字は
rd、列区切り文字はfdです。 -
列区切り文字
fdには、行区切り文字rdを含めることはできません。 -
Tunnel のデフォルトデリミタは、Windows では
\r\n、Linux では\nです。 -
アップロード開始時に、現在のアップロードで使用されている行区切り文字を確認できるメッセージが画面に表示されます。この機能は v0.21.0 以降で利用可能です。
Tunnel ファイルパスのスペースの可否
はい。ただし、パスを含むパラメーターは二重引用符("")で囲む必要があります。
.dbf ファイルのサポート
Tunnel はテキストファイルのみをサポートしており、バイナリファイルはサポートしていません。
通常のアップロードおよびダウンロード速度
Tunnel のアップロードおよびダウンロード速度は、ネットワーク状況に大きく影響されます。通常のネットワーク条件下では、速度は 1 MB/s ~ 20 MB/s の範囲です。
Tunnel ドメイン名の取得方法
Tunnel ドメイン名は パブリック Tunnel エンドポイントです。リージョンおよびネットワークによって、異なる Tunnel ドメイン名が対応しています。正しい パブリック Tunnel エンドポイントを取得するには、「エンドポイント」をご参照ください。
アップロードおよびダウンロード失敗のトラブルシューティング
MaxCompute クライアントのインストールディレクトリの ..\odpscmd_public\conf 内にある odps_config.ini ファイルから Tunnel ドメイン名を取得し、コマンドラインウィンドウで curl -i <domain name> コマンド(例:curl -i http://dt.odps.aliyun.com)を実行してネットワーク接続をテストします。接続に失敗した場合は、デバイスのネットワークを確認するか、正しい Tunnel ドメイン名を使用してください。
Java ヒープスペースエラーの解消
-
症状
Tunnel コマンドを使用してデータをアップロードまたはダウンロードする際に、次のエラーが発生することがあります。
Java heap space FAILED: error occurred while running tunnel command -
原因
-
原因 1:データをアップロードする際、1 行のデータが大きすぎます。
-
原因 2:ダウンロードするデータ量がクライアントプログラムの使用可能なメモリを超えています。
-
-
解決策
-
原因 1 に対する解決策
-
まず、デリミタが誤っていないか確認します。誤っていると、すべてのデータが 1 つの大きな行として読み込まれる可能性があります。
-
デリミタが正しく、ファイル内の 1 行のデータが非常に大きい場合は、クライアントプログラムのメモリが不足しています。クライアントプロセスの起動パラメーターを調整する必要があります。これを行うには、クライアントインストールディレクトリの
binディレクトリにある odpscmd スクリプトを編集し、java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@"コマンド内の-Xms64m -Xmx512mの値を増加させます。
-
-
原因 2 に対する解決策:クライアントインストールパスの
binディレクトリにある odpscmd スクリプトを編集します。java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@"コマンド内の-Xms64m -Xmx512mの値を増加させます。
-
セッションのライフサイクルと有効期限
各セッションにはサーバー上で 24 時間のライフサイクルがあり、その期間内であればいつでも使用できます。セッションの有効期限が切れると無効になり、それ以降はいかなる操作も実行できません。新しいセッションを作成してデータを再書き込みする必要があります。
セッションの共有可否
セッションはプロセスおよびスレッド間で共有できます。ただし、同じブロック ID を複数回使用しないように注意する必要があります。
Tunnel ルーティング機能とは
Tunnel エンドポイントを設定しない場合、Tunnel は自動的に MaxCompute サービスが配置されているネットワークに対応する Tunnel エンドポイントにトラフィックをルーティングします。Tunnel エンドポイントを設定した場合は、その設定が優先され、自動ルーティングは無効になります。
Tunnel は同時実行数をサポートしますか
はい。次のコマンドが例です。
tunnel upload E:/1.txt tmp_table_0713 --threads 5;