Hadoop streaming map/reduce jobs written in python using the mrjob library. ## Development and Testing System dependencies on Linux (ubuntu/debian): sudo apt install -y python3-dev python3-pip python3-wheel libjpeg-dev build-essential pip3 install --user pipenv On macOS (using Homebrew): brew install libjpeg pipenv You probably need `~/.local/bin` on your `$PATH`. Fetch all python dependencies with: pipenv install --dev Run the tests with: pipenv run pytest Check test coverage with: pytest --cov --cov-report html # open ./htmlcov/index.html in a browser ## Troubleshooting If you get pipenv errors like: AttributeError: '_NamespacePath' object has no attribute 'sort' ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /1/tmp/pip-install-h7lb6tqz/proto-google-cloud-datastore-v1/ ☤ ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/8 — 00:00:03 bnewbold@bnewbold-dev$ bnewbold@bnewbold-dev$ pipenv install --deploy --dev Installing dependencies from Pipfile.lock (e82980)… An error occurred while installing proto-google-cloud-logging-v2==0.91.3! Will try again. An error occurred while installing gapic-google-cloud-error-reporting-v1beta1==0.15.3! Will try again. An error occurred while installing gapic-google-cloud-datastore-v1==0.15.3! Will try again. An error occurred while installing proto-google-cloud-datastore-v1==0.90.4! Will try again. Then something has gone horribly wrong with your pip/pipenv/python setup. Don't have a good workaround yet. ## Running Python Jobs on Hadoop The `../please` script automates these steps; you should use that instead. When running python streaming jobs on the actual hadoop cluster, we need to bundle along our python dependencies in a virtual env tarball. Building this tarball can be done like: export PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy tar -czf venv-current.tar.gz -C .venv . ### Extraction Task An example actually connecting to HBase from a local machine, with thrift running on a devbox and GROBID running on a dedicated machine: ./extraction_cdx_grobid.py \ --hbase-table wbgrp-journal-extract-0-qa \ --hbase-host wbgrp-svc263.us.archive.org \ --grobid-uri http://wbgrp-svc096.us.archive.org:8070 \ tests/files/example.cdx Running from the cluster (once a ./venv-current.tar.gz tarball exists): ./extraction_cdx_grobid.py \ --hbase-table wbgrp-journal-extract-0-qa \ --hbase-host wbgrp-svc263.us.archive.org \ --grobid-uri http://wbgrp-svc096.us.archive.org:8070 \ -r hadoop \ -c mrjob.conf \ --archive venv-current.tar.gz#venv \ hdfs:///user/bnewbold/journal_crawl_cdx/citeseerx_crawl_2017.cdx ### Backfill Task An example actually connecting to HBase from a local machine, with thrift running on a devbox: ./backfill_hbase_from_cdx.py \ --hbase-table wbgrp-journal-extract-0-qa \ --hbase-host wbgrp-svc263.us.archive.org \ tests/files/example.cdx Running from the cluster (once a ./venv-current.tar.gz tarball exists): ./backfill_hbase_from_cdx.py \ --hbase-host wbgrp-svc263.us.archive.org \ --hbase-table wbgrp-journal-extract-0-qa \ -r hadoop \ -c mrjob.conf \ --archive venv-current.tar.gz#venv \ hdfs:///user/bnewbold/journal_crawl_cdx/citeseerx_crawl_2017.cdx